前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring MVC的参数解析器---HandlerMethodArgumentResolver

Spring MVC的参数解析器---HandlerMethodArgumentResolver

作者头像
haoming1100
发布2019-02-15 16:41:25
1.2K0
发布2019-02-15 16:41:25
举报
文章被收录于专栏:步履前行步履前行

最近我们的项目中的有一个获取客户ID的方法多次调用(数据库分离,每查一次客户ID,就要调用该方法一次),为了统一管理和减少代码的冗余,使用了Spring MVC的参数解析器,我们先看下官方描述

public interface HandlerMethodArgumentResolver

Strategy interface for resolving method parameters into argument values in the context of a given request.

这是官方文档上的描述,(感兴趣的同学可以http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/method/support/HandlerMethodArgumentResolver.html看下),从描述上可以看出是将请求的上下文中将方法参数解析为参数值,描述是如此的简单,以我个人的理解就是你在请求mvc的时候,假如有一个ID,然后你想要这个ID相对应的name或者其他字段,如果你不用参数解析器的话,可能你写个sql,请求一下就得到,但是会面临一个问题,如果多次通过该ID获取相对应的字段,那我们的代码冗余不说,还浪费我们一次一次的去写,正好HandlerMethodArgumentResolver帮我们解决了这个问题,在我们请求mvc的时候,HandlerMethodArgumentResolver会帮我们做参数的拦截处理,返回我们希望得到的结果,然后再使用,更加的简单了有没有。  首先HandlerAdapter会检查所有的 HandlerMethodArgumentResolver,如果你有相关操作,那么就会执行完以后再返回。  HandlerMethodArgumentResolver接口有2个方法:

代码语言:javascript
复制
boolean supportsParameter(MethodParameter parameter); 

  该方法是描述是否支持参数解析,只要返回True就行,一般是你需要处理的类型,即你需要返回的类型,假如你传入一个String类型的字符串"2017-07-15 10:00:00",想返回一个Date类型的,你可以直接比较

代码语言:javascript
复制
return parameter.getParameterType() == Date.class; 
或者不想比较也可以直接返回True
  第二个方法为:
代码语言:javascript
复制
Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
            NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;

 注意 parameter the method parameter to resolve. This parameter must have previously been passed to {@link #supportsParameter} which must*have returned {@code true}

代码语言:javascript
复制
官方描述了MethodParameter parameter参数必须传递给上面的第一个方法,并且返回True,还有一个参数NativeWebRequest webRequest要注意下,一般我们处理的参数都是操作该类型,webRequest.getParameter(key)
代码语言:javascript
复制
即可得到你请求MVC的参数,这个key就是你对应的参数名,(比如"name" : "xiaoming"),key = "name",返回的就是xiaoming,然后我们在这里(resolveArgument方法)可以写自己的业务操作,比如通过ID查到客户信息,然后可以直接
返回,返回类型Object就是。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档