RequestMappingHandlerAdapter 下的 customArgumentResolvers 是用来解析来自客户端的数据java
在这里咱们能够添加本身的解析方式下面是定义的步骤web
1.实现一个自定义的参数解析器,必须实现 HandlerMethodArgumentResolver 类spring
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.json
加入customArgumentResolvers 中mvc
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </list> </property> <property name="customArgumentResolvers"> <list> <bean class="demo.resolver.UserArgumentResolver"></bean> </list> </property> </bean>
附加:app
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 (); }