2019独角兽企业重金招聘Python工程师标准>>>
RequestMappingHandlerAdapter 下的 customArgumentResolvers 是用来解析来自客户端的数据
在这里我们可以添加自己的解析方式下面是定义的步骤
1.实现一个自定义的参数解析器,必须实现 HandlerMethodArgumentResolver 类
public class UserArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
//对要解析的参数进行判断,是否需要此解析器
return parameter.hasParameterAnnotation(User.class);
}
@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
//取得参数中的注解对象,也可以取得方法的注解对象
User u =parameter.getParameterAnnotation(User.class);
String paramName =u.value();
Object result = webRequest.getParameter(paramName);
if(result==null){
result = webRequest.getAttribute(paramName,RequestAttributes.SCOPE_SESSION);
}
return result;
}
}
2.
加入customArgumentResolvers 中
附加:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType. PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface User {
String value ();
}