参数解析器
参数解析器映射到Controller的某些类型参数时,做对应的处理。
public interface HandlerMethodArgumentResolver {
//用于判定是否需要处理该参数分解,返回true为需要,并会去调用下面的方法resolveArgument。
boolean supportsParameter(MethodParameter parameter);
//真正用于处理参数分解的方法,返回的Object就是controller方法上的形参对象。
Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;
}
复制代码
举例
public class HandlerMethodArgumentResolverExtended implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
Class<?> targetClass = parameter.getParameterType();
if (targetClass.isAssignableFrom(PageRequest.class)
|| targetClass.isAssignableFrom(UserProfile.class)
|| targetClass.isAssignableFrom(MobileProfile.class)) {
return true;
}
return false;
}
@Override
public Object resolveArgument(
MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
Class<?> targetClass = parameter.getParameterType();
if (targetClass.isAssignableFrom(PageRequest.class)) {
return PageHelper.buildPageRequest(webRequest);
} else if (targetClass.isAssignableFrom(UserProfile.class)) {
return UserHelper.buildUserProfile(webRequest);
} else if (targetClass.isAssignableFrom(MobileProfile.class)) {
return UserHelper.buildMobileProfile(webRequest);
}
return WebArgumentResolver.UNRESOLVED;
}
}
复制代码
场景
- 将前端传入的不同的分页参数转换为符合框架规范的参数,比如
Pageable
; - 将某些通过转换获得的参数赋值给Controller中的参数;