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)自定义参数解析器
由于之前用@RequestParam无法接收request payload 正文格式为json格式的字符串,只能使用@RequestBody整个接收,觉得麻烦,但是spring自带的参数解析器不具有这 ...
- 拦截器HandlerInterceptor+方法参数解析器HandlerMethodArgumentResolver用于统一获取当前登录用户信息
文章目录 前言 一.拦截器+方法参数解析器 是什么? 二.具体实现步骤 1.自定义权限拦截器LoginInterceptor拦截所有request请求,并将token解析为currentUser,最终 ...
- Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver
文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...
- spring MVC使用自定义的参数解析器解析参数
目录 写在前面 编写自定义的参数解析器解析请求参数 项目结构 定义注解 实体类 controller 定义参数解析器 注册参数解析器 启动项目 发起请求查看结果 写在前面 如果还有小伙伴不知道spri ...
- SpringMVC 参数解析器
一.问题 springMVC对于下面这种接口,参数是怎么解析的: @GetMapping("/hello/{id}") public void hello3(@PathVariab ...
- Spring自定义参数解析器
虽然Spring提供了比较完善的参数解析器,但是对于一些特殊的数据类型我们还是需要进行特殊处理,这样会提高代码的复杂度,增加冗余的代码,降低代码可读性和可维护性.所以自定义参数解析器是一个很好的解 ...
- springmvc自定义参数解析器
由于开发中一般使用参数提交方式是json格式,对于单个参数的传递使用无法接收只能自定义参数解析器处理 springmvc的自定义参数解析器实现HandlerMethodArgumentResolver ...
- (十六)ATP应用测试平台——java应用中的过滤器Filter、拦截器Interceptor、参数解析器Resolver、Aop切面,你会了吗?
前言 过滤器Filter.拦截器Interceptor.参数解析器Resolver.Aop切面是我们应用开发中经常使用到的技术,到底该如何使用这些web附属功能, 本小节我们就分别介绍一下其各自的用法 ...
- SpringBoot--网上商城项目(自定义的参数解析器、购物车后台前台功能、商品详情页)
目录 一.自定义的参数解析器 关于Mybatis-plus时间字段代码生成问题 报错信息:Caused by: java.lang.IllegalStateException: No typehand ...
- Spring参数解析器
文章目录 请求映射处理适配器:RequestMappingHandlerAdapter 参数解析器:HandlerMethodArgumentResolver 参数处理相关注解 1.@PathVari ...
最新文章
- poly-YOLOv3
- hdu3117 斐波那契前后4位
- Python基于socket实现的TCP客户端
- C语言 va_arg 宏 - C语言零基础入门教程
- 算法与数据结构题目汇总
- 浏览器专属 CSS Hack:区分 Firefox / Opera / Safari / Internet Explorer
- Clion配置Ros环境
- git bash 出现vim的时候怎么退出
- 建站基础知识之HTML 是何方神圣?
- 常用数据类型使用转换详解
- 第一次作业 三班20
- 收藏--hibernate——继承关系以及三个subclass标签的区别
- Java实现发送短信
- ARM公司为何如此成功
- 《Loy解说SpringCloud之Zuul》
- python遍历文件夹生成标签数据txt文件
- obj文件转gltf文件
- Java实现统计字符次数(按大写、小写、数字来统计)
- [jzoj 4742] 单峰 {快速幂}
- 再见了 VMware,一款更轻量级的虚拟机!