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

最近我们的项目中的有一个获取客户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个方法:
boolean supportsParameter(MethodParameter parameter); 

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

return parameter.getParameterType() == Date.class; 
或者不想比较也可以直接返回True
  第二个方法为:
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}

官方描述了MethodParameter parameter参数必须传递给上面的第一个方法,并且返回True,还有一个参数NativeWebRequest webRequest要注意下,一般我们处理的参数都是操作该类型,webRequest.getParameter(key)
即可得到你请求MVC的参数,这个key就是你对应的参数名,(比如"name" : "xiaoming"),key = "name",返回的就是xiaoming,然后我们在这里(resolveArgument方法)可以写自己的业务操作,比如通过ID查到客户信息,然后可以直接
返回,返回类型Object就是。
posted @ 2017-07-15 13:14  haoming1100  阅读(657)  评论(0编辑  收藏  举报
本文作者: haoming1100 博客链接: http://www.cnblogs.com/haoming1100 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载时必须带上原文链接!