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

}
相关文章
相关标签/搜索