spring mvc 使用 customArgumentResolvers 自定義註解式參數解析

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

}
相關文章
相關標籤/搜索