一.Post请求中Dto参数带@RequestBody

方法代码:

    @PostMapping("/test")public UserDto getUserParam(@RequestParam String myName,@RequestHeader(value = "token", required = false) String token,@RequestAttribute(value = "attr", required = false) String attr,@RequestBody UserDto userDto)

1.PostMan请求(Body不写任何东西):

请求结果:

结果返回报错,

我们看下源码,

1.【RequestResponseBodyMethodProcessor 类参数解析器】方法来处理,循环默认的10种消息转换器,找到当前参数类型进行解析

2.这里注意@RequestBody类型参数会用 MappingJackson2HttpMessageConverter 这个消息转换器,

3.判断当前类型无法解析当前参数,返回null,判断为空并且参数是必填的,就会抛出异常

2.PostMan请求(Body只写 {}):

请求结果:

结果返回成功,

我们看下源码,

1.经过消息解析器返回的结果不是null,只不过dto内部属性都是空的,但是并不会报错

二.Post请求中Dto参数不带@RequestBody

方法代码:

   @PostMapping("/test")public UserDto getUserParam(@RequestParam String myName,@RequestHeader(value = "token", required = false) String token,@RequestAttribute(value = "attr", required = false) String attr,UserDto userDto) 

1.PostMan请求(Body不写任何东西或者写参数信息):

请求结果:

返回结果不报错,但是也没有赋值成功

2.PostMan请求(dto参数写到param参数):

请求结果:

返回结果成功,赋值成功

我们看下源码,

1.【ModelAttributeMethodProcessor 类参数解析器】方法来处理,获取请求中所有以param类型的参数,找到当前dto进行解析,如果找到和dto属性的参数名称一样就赋值

总结:

1.dto实体类型的参数,标注@RequestBody(Default Required=true)注解时,Servlet一定会读取发送的Body体中的json参数,

(1)Body体中什么都不传,返回会报错

(2)Body体中传{},返回不会报错,解析结果是属性为null的dto

(3)Body体中传错误参数的{"a":1},返回不会报错,解析结果是属性为null的dto

(4)【RequestResponseBodyMethodProcessor 类参数解析器】解析参数

2.dto实体类型的参数,什么注解都不标,Servlet会去读取发送的Param类似url?传参的参数

(1)Body体中什么都不传或者传{},返回不会报错,解析结果是属性为null的dto

(2)Param类似url?传参,返回才会成功,解析结果才会成功

(3)【ModelAttributeMethodProcessor 类参数解析器】解析参数

SpringBoot关于@RequestBody请求参数相关推荐

  1. springboot 处理put请求参数

    put请求参数理论上是在请求的body中(json传输),但是使用如下方式不能得到: @RequestParam Integer meetingId,@RequestParam Boolean pas ...

  2. SpringBoot - 获取Get请求参数详解

    利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.直接在请求路径中 (1).假 ...

  3. SpringBoot - 获取Get请求参数详解(附样例:非空、默认值、数组、对象)

    利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.参数直接在路径中 (1)假设 ...

  4. SpringBoot 获取 Get 请求参数详解

    叙述 利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数. 下面演示 Controller 如何接收以 GET 方式传递过来的参数. 解决方案 参数直接在路径 ...

  5. springboot获取URL请求参数的几种方法

    原文地址:http://www.cnblogs.com/xiaoxi/p/5695783.html 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于pos ...

  6. SpringBoot的GET请求参数包含[]等特殊符号,返回400状态码

    今天系统2.1版本上线时,忽然发现一个问题,通知公告模块中的一个文件不能下载了,而其他的是可以的,经过仔细的排查发现,是由于文件名中包含了英文的[],问题如下图: 原因分析 Tomcat的新版本中增加 ...

  7. springboot获取多个请求参数_springboot获取URL请求参数的多种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...

  8. springboot post 请求参数过长请求接口报错 An HTTP line is larger than 4096 bytes

    springboot项目post请求参数过长请求接口报错如下: 解决办法将post请求参数值调大: server:tomcat:max-http-form-post-size: 5MB

  9. springboot使用validator进行参数校验

    前言 公司项目是前后端分离的,为了保证前端传输数据的合法性,对参数进行校验就很有必要.hibernate-validator就是一个不错的参数校验的解决方法.spring-boot-starter-w ...

最新文章

  1. mysql5.7gtid_MySQL5.7 GTID 运维实战
  2. 013:ADS semihosting与硬件重定向(转)
  3. 北邮dsp matlab实验,北京邮电大学《数字信号处理》门爱东-DSP实验.pdf
  4. 【计算机组成原理】逻辑运算
  5. re管理器java格式_正则表达式工具类——ReUtil
  6. hbase中为何不能向表中插入数据_生产环境使用HBase,你必须知道的最佳实践 | 百万人学AI...
  7. AOP拦截+权限验证+返回默认接口对象
  8. 浏览器正确理解和使用GBK及UTF-8(UTF-8 + BOM)网页编码
  9. 突发,Spring框架发现重大漏洞!
  10. 稳压二极管型号大全(转载)
  11. matlab imagesc 白色,[转载]matlab 中imagesc的用法
  12. CRNN原理详解、代码实现及BUG分析
  13. SOUI Text控件不同状态设置不同颜色的方法
  14. 洛菲创意字体设计分享--绿斗堂字体网
  15. 小米路由器r2d_小米路由器R2D亮黄灯维修
  16. 微信小程序倒计时功能
  17. Git和GitHub的关系和区别
  18. 防火墙NAT综合实验——nat控制,豁免,远程,DMZ区域(带命令)
  19. 美通社企业新闻汇总 | 2019.1.23 | 上海迪士尼建疯狂动物城园区;戴森运营总部移至新加坡...
  20. 杭电oj 1002 C语言解法

热门文章

  1. Tomcat-Server.xml配置图片路径
  2. android studio刷rom,Android Studio 之 ROM【1】, Entity,Dao,Database
  3. python图片隐写_基于python的LSB隐写与分析
  4. git 代码回滚_谁说用 Git 一定要用命令行?试试 SourceTree 吧
  5. matlab 按文件名排序,在MATLAB中对字符串进行排序,如Windows 7,对资源管理器中的文件名进行排序(尊重数字中间字符串)...
  6. jtextpane设置不能选中_电脑为什么打不开指定的网站?什么是DNS解析我要如何设置DNS...
  7. React传递参数的多种方式
  8. Maven入门:使用Nexus搭建Maven私服及上传下载jar包
  9. netstat 查看端口
  10. [转一下]未来卫星通信发展趋势