首页 > 作文

一文带你揭秘SpringMvc参数值映射

更新时间:2023-04-04 18:51:59 阅读: 评论:0

目录
前言一.处理过程的抽象二.常见传参类型1.自定义对象类型2.@requestparam注解参数3.@requestbody注解参数4.简单类型,无@requestparam注解总结

前言

我们平时开发的接口参数类型,有简单类型例如long,string,也有json格式的,还有自定义对象类型。想一想,如果让我们自己开发一套参数值映射代码,还是挺复杂,一是需要处理的参数类型比较多,还有就是会有一些复杂的场景,比如对象的多我们是一家人歌词层嵌套。今天我将从处理过程的抽象,常见传参类型两个大的方面讲解参数值映射。

一.处理过程的抽象

说到参数映射处理的抽象,就不得不提到

handlermethodargumentresolver接口:

接口有两个方法: 1.boolean supportsparameter(methodparameter parameter); 用来判断实现类是否可以处理该类型的参数

2.object resolveargument(…) 经过读取参数值,类型转换,值映射等处理,返回参数 所有参数值处理类都需要实现此接口,遵从了设计模式中的模版模式。 处理过程通俗地说就是:从一堆螺丝刀里面,挨个判断,这把螺丝刀是否可以拧这个螺丝,如果型号刚好匹配,那就拿着这个螺丝刀去拧螺丝。 springmvc还给这些个螺丝刀,找了个工具箱,来存放他们。这个工具箱名字叫做: handlermethodargumentresolvercomposite,composite是混合,合成的意思。 handlermethodargumentresolvercomposite将所有的参数值处理类整合在一起。

二.常见传参类型

1.自定义对象类型

示例:

@reques爱情思念短信tmapping("/test1")public string methodforobjectparam (familydto familydto){    system.out.println("familydto:"+json.tojsonstring(familydto));    return "";}

对应的参数值处理类为

rvletmodelattributemethodprocessor

参数值映射的过程如下:

2.@requestparam注解参数

示例:

@requestmapping("/test3")public string methodforrequestparam (@requestparam integer param){    system.out.println("requestparam:"+json.tojsonstring(param));    return "";}

对应的参数值处理类为requestparammethodargumentresolver

参数映射的步骤如下:

1.1从request中获取参数名对应的值

1.2参数值类型转换,从request中获取的参数值为string,需要转化为对应integer等类型。 spring-core提供了超级多的类型转换工具,我截取了部分类:

spring的强大不仅仅在它的设计思想,对各种复杂情况的支持,还有强大的代码底层。

3.@requestbody注解参数

示例:

@requestmapping("/test6")public string methodforrequestbody (@requestbody familydto familydto){    system.out.println("methodfornormalparam:"+json.tojsonstring(familydto));    return "";}

对应的参数值处理类为:requestresponbodymethodprocessor

参数映射的步骤如下:

1.1将body反序列化为对象

1.2如果类型为optional,创建optional类型对象

4.简单类型,无@requestparam注解

示例:

@requestmapping("/test5")public string methodfornormalparam (integer param){    system.out.println("methodfornormalparam:"+json.tojsonstring(param));    return "";}

对于参数param,和带有@requestparam注解的参数一样,使用 requestparammethodargumentresolver类进行参数值映射。

springmvc接口调用的核心方法invokeforrequest在invo端午节的诗句古诗大全cablehandlermethod类中,大家有兴趣,可以自己阅读下源码:

pubcos60°lic object invokeforrequest(nativewebrequest request, @nullable modelandviewcontainer mavcontainer,      object... providedargs) throws exception {   //从request中读取,转化参数值   object[] args = getmethodargumentvalues(request, mavcontainer, providedargs);   if (logger.istraceenabled()) {      logger.trace("invoking '" + classutils.getqualifiedmethodname(getmethod(), getbeantype()) +            "' with arguments "高中全日制 + arrays.tostring(args));   }   //方法的调用   object returnvalue = doinvoke(args);   if (logger.istraceenabled()) {      logger.trace("method [" + classutils.getqualifiedmethodname(getmethod(), getbeantype()) +            "] returned [" + returnvalue + "]");   }   return returnvalue;}

总结

到此这篇关于springmvc参数值映射的文章就介绍到这了,更多相关springmvc参数值映射内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 18:51:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/fa54248b178563dec2730da26c79c987.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:一文带你揭秘SpringMvc参数值映射.doc

本文 PDF 下载地址:一文带你揭秘SpringMvc参数值映射.pdf

下一篇:返回列表
标签:参数   类型   注解   螺丝刀
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图