controller層:
@GetMapping(value = "/api/users/{device}")
public ResultDO get(@PathVariable("device") String device){
***
}
攔截器中:
public class ParameterInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//傳統方式獲取
String device = request.getParameter("device");
System.out.println("傳統方式獲取device: \t" + device);
//map方式
Map map = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
System.out.println("map封裝格式: \t" + map);
return true;
}
***
}
配置攔截器:
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
@Autowired
private ParameterInterceptor parameterInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(parameterInterceptor).addPathPatterns("/api/users/**");
}
@Bean
public ParameterInterceptor parameterInterceptor(){
return new ParameterInterceptor();
}
}
運行sprinboot項目訪問訪問 URL: http://127.0.0.1:8080/api/users/andriod 測試,查看控制台輸出:
傳統方式獲取device: null
map封裝格式: {device=andriod}
說明request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE)這種方式能獲取到restful風格的參數