博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
阅读量:6297 次
发布时间:2019-06-22

本文共 1786 字,大约阅读时间需要 5 分钟。

SpringMVC提供了一个HandlerMethodArgumentResolver接口可以让我们处理方法的参数,和注解结合提来,能有很强大的功能,例如SpringMVC提供的@ModelAttribute就是通过这种方法来处理的,它有对应的实现HandlerMethodArgumentResolver接口的类----ModelAttributeMethodProcessor,通过这种方法来处理参数

我们也可以使用一个类实现HandlerMethodArgumentResolver,在<mvc:annotation-driven>的子标签<mvc:argument-resolvers>中配置好后,SpringMVC就会调用我们写的类,然后我们在里面进行对参数的处理就好了,简单的示例代码如下,下面的功能是使用一个自定义的注解,来给参数设置一个初始值

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

配置如下:

只是简单的写了个例子来记录用法,在resolveArgument里面可以做很多事,例如在里面可以利用parameter获取参数的Class对象,然后里面反射机制来处理数据,或者在里面进行验证参数是否非空,等等。

参考:

http://blog.csdn.net/u013160932/article/details/50609092

 

你可能感兴趣的文章
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>
配置Quartz
查看>>
Linux 线程实现机制分析
查看>>
继承自ActionBarActivity的activity的activity theme问题
查看>>
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>