SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
2017-06-23 11:41
274 查看
SpringMVC提供了一个HandlerMethodArgumentResolver接口可以让我们处理方法的参数,和注解结合提来,能有很强大的功能,例如SpringMVC提供的@ModelAttribute就是通过这种方法来处理的,它有对应的实现HandlerMethodArgumentResolver接口的类----ModelAttributeMethodProcessor,通过这种方法来处理参数
我们也可以使用一个类实现HandlerMethodArgumentResolver,在<mvc:annotation-driven>的子标签<mvc:argument-resolvers>中配置好后,SpringMVC就会调用我们写的类,然后我们在里面进行对参数的处理就好了,简单的示例代码如下,下面的功能是使用一个自定义的Java注解,来给参数设置一个初始值
Java注解如下:
Resolver如下:
Controller如下:
会打印出123
配置如下:
只是简单的写了个例子来记录用法,在resolveArgument里面可以做很多事,例如在里面可以利用parameter获取参数的Class对象,然后里面反射机制来处理数据,或者在里面进行验证参数是否非空,等等。
参考:
http://blog.csdn.net/u013160932/article/details/50609092
我们也可以使用一个类实现HandlerMethodArgumentResolver,在<mvc:annotation-driven>的子标签<mvc:argument-resolvers>中配置好后,SpringMVC就会调用我们写的类,然后我们在里面进行对参数的处理就好了,简单的示例代码如下,下面的功能是使用一个自定义的Java注解,来给参数设置一个初始值
Java注解如下:
@Target(value=ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface ValueAnnotation { public String value() default ""; }
Resolver如下:
public class MyResolver implements HandlerMethodArgumentResolver { /* * 返回false则不会进入到resolveArgument方法,返回true则会 */ @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(ValueAnnotation.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { // 通过parameter获取参数上的Annotation ValueAnnotation annotation = parameter.getParameterAnnotation(ValueAnnotation.class); // 通过Annotation获取设置的值 String value = annotation.value(); // 将值返回给参数 return value; } }
Controller如下:
@Controller @RequestMapping("resolver") public class AnnotationAndResolverController { @RequestMapping(value = "/test") public void test(@ValueAnnotation("123") String value) { System.out.println(value); } }
会打印出123
配置如下:
<mvc:argument-resolvers> <bean class="resolver.MyResolver"/> <bean class="resolver.MyModelAttributeResolver"/> </mvc:argument-resolvers>
只是简单的写了个例子来记录用法,在resolveArgument里面可以做很多事,例如在里面可以利用parameter获取参数的Class对象,然后里面反射机制来处理数据,或者在里面进行验证参数是否非空,等等。
参考:
http://blog.csdn.net/u013160932/article/details/50609092
相关文章推荐
- SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
- SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
- SpringMVC重要接口(一)HandlerMethodArgumentResolver
- SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)
- SpringMVC源码总结(十)自定义HandlerMethodArgumentResolver
- SpringMVC系列(十)<mvc:default-servlet-handler/>(处理静态资源)和<mvc:annotation-driven />
- SpringMVC HandlerMethodArgumentResolver解读
- SpringMVC杂记(十七) HandlerMethodArgumentResolver接口应用example
- springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- SpringMVC源码解析 - HandlerAdapter - HandlerMethodArgumentResolver
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- SpringMVC之分析HandlerMethodArgumentResolver请求对应处理器方法参数的解析过程(一)
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC的<mvc:default-servlet-handler/>
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC杂记(十七) HandlerMethodArgumentResolver接口应用example