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 (); }