HandlerMethodArgumentResolver 参数解析器
关于springMvc中的参数解析器
springMvc中的HandlerAdapter会检测所有的 HandlerMethodArgumentResolver(对参数的解析器)
HandlerMethodArgumentResolver接口包含两个接口方法
|
1
|
boolean supportsParameter(MethodParameter parameter); |
MethodParameter方法参数对象 通过它可以获取该方法参数上的一些信息 如方法参数中的注解信息等
通过该方法我们如果需要对某个参数进行处理 只要此处返回true即可 如对Date类型数据处理的话
Class parameterType=parameter.getParameterType();
return parameterType.equals(Date.class);
另一个为
|
1
2
3
4
|
Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception; |
该方法就是对参数的解析,返回的Object会自动赋值到参数对象中
实例: 自定义一个日期处理注解,通过一个HandlerMethodArgumentResolver来解析
第一步:为HandlerAdapter配置一个自定义的HandlerMethodArgumentResolver
|
1
2
3
4
5
|
<mvc:annotation-driven conversion-service="conversionService"> <mvc:argument-resolvers> <bean class="com.car.admin.controller.CustomerHandlerMethodArgumentResolver"></bean> </mvc:argument-resolvers> </mvc:annotation-driven> |
第二步:定义一个日期注解
|
1
2
3
4
5
|
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.PARAMETER)public @interface CustomerDate { String value();} |
第三步: 实现HandlerMethodArgumentResolver
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class CustomerHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { Annotation[] methodAnnotations= parameter.getParameterAnnotations(); for(Annotation annotation:methodAnnotations){ if(annotation instanceof CustomerDate){ CustomerDate customerDate=(CustomerDate)annotation; String dataStringValue=customerDate.value(); SimpleDateFormat formater=new SimpleDateFormat("yyyy-MM-dd HH:mm"); return formater.parse(dataStringValue); } } return null; } @SuppressWarnings("unchecked") public boolean supportsParameter(MethodParameter parameter) { Class parameterType=parameter.getParameterType(); return parameterType.equals(Date.class); }} |
第四步: 控制器处理
|
1
2
3
4
5
6
7
8
9
10
|
@RequestMapping("/user_list") @ResponseBody public Map <String,Object> userList(@CustomerDate(value = "2015-02-01 03:55") Date date,HttpServletRequest request,@PageableDefault(page=0,size=10) Pageable pageable,Model modelMap) { Map<String,String[]> params=HttpUtils.getParameterValuesMap(request,Constants.SEARCH_PREFIX); Page<User> userPage=userService.findPage(pageable,params); Map<String,Object> results=new HashMap<String,Object> (); results.put("total", userPage.getTotalElements()); results.put("rows", userPage.getContent()); return results; } |
通过上面的处理: 通过CustomerDate 注解 我们可以通过value来制定具体的日期,并且会自动为date赋值,通过此小例子我们可以引申出各种实现
转自 https://www.cnblogs.com/coollijie/p/4244003.html
HandlerMethodArgumentResolver 参数解析器的更多相关文章
- springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)
HandlerMethodArgumentResolver是用来为处理器解析参数的,主要用在HandlerMethod中,每个Resolver对应一种类型的参数,其实现类特别的多. HandlerMe ...
- 自定义HandlerMethodArgumentResolver参数解析器和源码分析
在初学springmvc框架时,我就一直有一个疑问,为什么controller方法上竟然可以放这么多的参数,而且都能得到想要的对象,比如HttpServletRequest或HttpServletRe ...
- springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)
之前两篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)和springMVC源码解析--HandlerMethodArgumentResol ...
- springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)
上一篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)中我们已经介绍了参数解析相关的东西,并且也提到了HandlerMethodArgume ...
- 实现自定义的参数解析器——HandlerMethodArgumentResolver
1.为什么需要自己实现参数解析器 我们都知道在有注解的接口方法中加上@RequestBody等注解,springMVC会自动的将消息体等地方的里面参数解析映射到请求的方法参数中. 如果我们想要的信息不 ...
- 一步一步自定义SpringMVC参数解析器
随心所欲,自定义参数解析器绑定数据. 题图:from Zoommy 干货 SpringMVC解析器用于解析request请求参数并绑定数据到Controller的入参上. 自定义一个参数解析器需要实现 ...
- SpringMVC自动封装List对象 —— 自定义参数解析器
前台传递的参数为集合对象时,后台Controller希望用一个List集合接收数据. 原生SpringMVC是不支持,Controller参数定义为List类型时,接收参数会报如下错误: org.sp ...
- SpringBoot自定义参数解析器
一.背景 平常经常用 @RequestParam注解来获取参数,然后想到我能不能写个自己注解获取请求的ip地址呢?就像这样 @IP String ip 二.分析 于是开始分析 @RequestPara ...
- SpringMVC 自定义参数解析器.
一.简述 有没有想过像 @RequestParam.@RequestBody 这些注解的工作原理呢?为什么 form 表单.application/json 的参数能够直接封装进 Bean 对象中呢? ...
随机推荐
- Jib构建你的第一个java镜像
jib Official:GoogleContainerTools/jib 本文示例完整demo github地址 github.com/moxingwang/- 想要了解并且使用jib,首先你得知道 ...
- Session 存储和失效方式
Session 一般的操作是放在本地的Asp.net StatService上.实现进程隔离,方便Session操作,下面说说Session各属性. 1)不使用Session <sessionS ...
- 【BZOJ1299】巧克力棒(Nim游戏,SG函数)
题意:TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度. TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒).你 ...
- hdu 5972 Regular Number 字符串Shift-And算法 + bitset
题目链接 题意 给定两个串\(S,T\),找出\(S\)中所有与\(T\)匹配的子串. 这里,\(T\)的每位上可以有若干(\(\leq 10\))种选择,匹配的含义是:对于\(S\)的子串的每一位, ...
- asp.net内置对象 Response对象使用介绍
Response对象是HttpRespone类的一个实例.该类主要是封装来自ASP.NET操作的HTTP相应信息.Response对象将数据作为请求的结果从服务器发送到客户浏览器中,并提供有关响应的消 ...
- myeclipse服务器"未能创建视图:抛出意外异常。"
找到对应目录 Workspaces\.metadata\.plugins\org.eclipse.core.runtime\.settings 下的 com.genuitec.eclipse.ast. ...
- 16Aspx.com-PHP企业整站源码 景观石材大理石类织梦模板 含手机移动端 完整源码 APP+PC
=============================================== 源码站长资源交易专业网-商业源码下载,VIP源码,程序交易,毕业设计交易,站长交易|- 16aspx.c ...
- 调用Thread.interrupt()方法到底会发生什么?
1. 当线程处于Blocked状态(sleep,wait,join),线程会退出阻塞状态,并抛出一个InterruptedException.park除外,它有响应但是不会抛出异常 2. 当线程处于R ...
- 注意这几点,轻轻松松配置 Nginx + Tomcat 的集群和负载均衡
Tomcat 集群是当单台服务器达到性能瓶颈,通过横向扩展的方式提高整体系统性能的有效手段.Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,可以通过简单的配置实现 Tomcat 集群 ...
- hosts不支持泛解析
hosts不支持泛解析,只能是一个域名对应一个IP. 如果想要实现只能用一些第三方的DNS软件做解析.