SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
SpringMVC提供了一个HandlerMethodArgumentResolver接口可以让我们处理方法的参数,和注解结合提来,能有很强大的功能,例如SpringMVC提供的@ModelAttribute就是通过这种方法来处理的,它有对应的实现HandlerMethodArgumentResolver接口的类----ModelAttributeMethodProcessor,通过这种方法来处理参数
我们也可以使用一个类实现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 Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现 到这里已经写到第12篇了,前11篇基本上把Spring M ...
- SpringMVC(二六) SpringMVC配置文件中使用mvc:view-controller标签
在springmvc中使用mvc:view-controller标签直接将访问url和视图进行映射,而无需要通过控制器. 参考springmvc.xml内容: <?xml version=&qu ...
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
http://blog.csdn.net/truong/article/details/30971317 http://blog.csdn.net/fytain/article/details/439 ...
- SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题
自定义Spring MVC3的参数映射和返回值映射 + fastjson 自定义Spring MVC3的参数映射和返回值映射 + fastjson首先说一下场景:在一些富客户端Web应用程序中我们会有 ...
- SpringMVC HandlerMethodArgumentResolver自定义参数转换器
来源: https://www.cnblogs.com/daxin/p/3296493.html 自定义Spring MVC3的参数映射和返回值映射 + fastjson首先说一下场景:在一些富客户端 ...
- SpringMVC <mvc:view-controller path=""/>标签
<mvc:view-controller path=""/>标签的作用 对应WEB-INF目录下面的JSP页面,我们知道是不能直接使用URL访问到.需要通过转发的方式, ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- springmvc 4.3,RequestParamMethodArgumentResolver无法正常解析String参数问题解决
搭建一个新工程时,想使用最新稳当版的springmvc,所以选择了最新的版本 <dependency> <groupId>org.springframework</gro ...
- SpringMVC源码情操陶冶-RequestMappingHandlerAdapter适配器
承接前文SpringMVC源码情操陶冶-HandlerAdapter适配器简析.RequestMappingHandlerAdapter适配器组件是专门处理RequestMappingHandlerM ...
随机推荐
- 未能加载文件或程序集“System.Data.SQLite”
未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项.试图加载格式不正确的程序. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误 ...
- HTML canvas fillText()与measureText()方法
HTML5 canvas fillText() 方法 实例 使用 fillText(),在画布上写文本 "你好!word!" 和 "我是w3c": JavaSc ...
- JavaScript快速找出字符串并返回其下标
var box = "this is javascript"; for (var i = -1, arr = []; (i = box.indexOf("s", ...
- 基于原生JS的jsonp方法的实现
基于原生JS的jsonp方法的实现 jsonp,相信大家并不陌生,是在js异步请求中解决跨域的方法之一,原理很简单,有不清楚的同学可以google下,这里就补详细解释了.在Jquery库中,jQuer ...
- [Codeforces19D]Points 线段树
大致题意: 给出n个询问,每次询问有三种: 1.往平面上加一个点 2.删除平面上的一个点 3.给出一个点p,查询平面上某点q,使得q.x>p.x且q.y>p.y,输出x轴坐标最小的q,若有 ...
- redis环境搭建和java应用
安装 连接 Java连接redis 下载 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 解压移动 tar -xvf redis-4 ...
- Cookie的用法
string strCookie=""; //创建一个名为user HttpCookie userCookie=new HttpCookie("user"); ...
- openstack首页默认跳转
在/var/www/html新建index.html <html> <head> <meta http-equiv="Content-Language" ...
- Selenium模拟登陆简书
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.c ...
- .net中session的使用
什么是Session? Session即会话,是指一个用户在一段时间内对某一个站点的一次访问. Session对象在.NET中对应HttpSessionState类,表示"会话状态" ...