专栏首页步履前行Spring MVC的参数解析器---HandlerMethodArgumentResolver

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就是。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Java】基础篇-LinkedList

    说到 LinkedList,那么我们大家的第一想法就是 链表,是插入删除快,随机访问慢,今天我们就来一探究竟,究竟内部的它是什么构造导致的问题,我们是否可以在使...

    haoming1100
  • Java8 LocalDate类

      最近一直在使用Java8,正好上午的时候学习到了关于Java8的新特性之一【LocalDate类】,写下来一些心得和大家分享一下!

    haoming1100
  • xxl-job 源码分析系列(1)- 配置运行

      XXL-JOB是一个轻量级分布式任务调度平台,当然我司也在用,然后正巧自己想学一学源码分析,就挑正好在用的xxl-job了。

    haoming1100
  • 神经网络的参数和超参数

    W[1],b[1],W[2],b[2],W[3],b[3]...W^{[1]}, b^{[1]}, W^{[2]}, b^{[2]}, W^{[3]}, b^{...

    Steve Wang
  • Java 可变参数

    Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一...

    MonroeCode
  • 干货|XGBoost进阶—调参+实战

    0,silent模式关闭(一般我们选择slient=0,因为这样能更好的帮助我们理解模型)

    AI部落联盟
  • 关于.NET参数传递方式的思考

        年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想...

    彭泽0902
  • 46. Vue路由传参的基本使用

    上一章节讲解了vue-router的基本使用,本章节来开始看看如何在路由中设置参数。

    Devops海洋的渔夫
  • 如何发布Jar包到Maven Central Repository

    Maven Central 网站并不提供注册的功能,你需要到 Sonatype 网站上进行注册。而事实上,Sonatype 网站也没有直接提供一个注册链接。真正...

    lambeta
  • 如何使用高大上的方法调参数

    本文主要介绍作者与 Elad Hazan, Adam Klivans 合作的最新论文: Hyperparameter Optimization: A Spec...

    AI研习社

扫码关注云+社区

领取腾讯云代金券