參數(shù)解析器
參數(shù)解析器的作用是用于將前端請求中的的參數(shù)根據(jù)自定義規(guī)則映射到Controller中的方法的參數(shù)上
該請求的目的是表達搜索條件并分頁顯示润匙。由于搜索條件在項目中使用場景較多且內(nèi)容不固定,所以在Controller方法中無法使用@requestBody等形式進行數(shù)據(jù)綁定谚攒。
解決思路是自動封裝一個對象借跪,接收并封裝前端提交的搜索條件
類定義如下
public class Searchable {
// 具體實現(xiàn)
}
定義參數(shù)解析器
public class SearchableMethodArgumentResolver implements HandlerMethodArgumentResolver {
// 判斷是否進行參數(shù)解析
@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();
// 具體實現(xiàn)
return searchable;
}
}
resolveArgument方法中將前端提交的參數(shù)轉(zhuǎn)換為Searchable對象的具體實現(xiàn)。
在Controller中溜族,直接使用Searchable作為參數(shù)接收
@Controller
public class FrontController {
@RequestMapping("/list")
@ResponseBody
public Response list(Searchable searchable) {
//具體實現(xiàn)
}
}
最后乡革,定義參數(shù)解析器哨免,在項目啟動時加入spring IOC容器
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
/**
* searchable參數(shù)解析器
*/
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(searchableMethodArgumentResolver());
}
private SearchableMethodArgumentResolver searchableMethodArgumentResolver() {
SearchableMethodArgumentResolver searchableMethodArgumentResolver = new SearchableMethodArgumentResolver();
return searchableMethodArgumentResolver;
}
}