参数解析器
参数解析器的作用是用于将前端请求中的的参数根据自定义规则映射到Controller中的方法的参数上
该请求的目的是表达搜索条件并分页显示。由于搜索条件在项目中使用场景较多且内容不固定,所以在Controller方法中无法使用@requestBody等形式进行数据绑定。
解决思路是自动封装一个对象,接收并封装前端提交的搜索条件
类定义如下
public class Searchable {
// 具体实现
}
定义参数解析器
public class SearchableMethodArgumentResolver implements HandlerMethodArgumentResolver {
// 判断是否进行参数解析
@Override
public boolean supportsParameter(MethodParameter parameter) {
return Searchable.class.isAssignableFrom(parameter.getParameterType());
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
Searchable searchable = new Searchable();
// 具体实现
return searchable;
}
}
resolveArgument方法中将前端提交的参数转换为Searchable对象的具体实现。
在Controller中,直接使用Searchable作为参数接收
@Controller
public class FrontController {
@RequestMapping("/list")
@ResponseBody
public Response list(Searchable searchable) {
//具体实现
}
}
最后,定义参数解析器,在项目启动时加入spring IOC容器
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
/**
* searchable参数解析器
*/
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(searchableMethodArgumentResolver());
}
private SearchableMethodArgumentResolver searchableMethodArgumentResolver() {
SearchableMethodArgumentResolver searchableMethodArgumentResolver = new SearchableMethodArgumentResolver();
return searchableMethodArgumentResolver;
}
}