@RequestBody接收某些参数为null

@RequestBody接收某些参数为null

问题描述

在⽤postman测试的时候,发现有⼀个参数fBillNo明明有传值的,但接⼝controller接收到的该参数为null,我把参数也直接返回了,但其他参数都不为null的。

在这里插入图片描述

在这里插入图片描述

结论:实体中参数fBillNo命名不规范导致的,没有按照标准“驼峰法”进⾏参数命名,而myName符合标准则没有这个问题。

骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。

解决方式一

将fBillNo改为符合驼峰标准:fbillNo

在这里插入图片描述

将fBillNo改为全小写:fbillno

在这里插入图片描述

解决方式二

如图,使用@JsonProperty注解,直接在不规范的参数上加上@JsonProperty(value=“fBillNo”) 来解决

在这里插入图片描述
在这里插入图片描述

解决方式三

⼿动在实体类添加get / set⽅法

因为使用了lombok自动生成get / set方法,lombok⽣成的是getFBillNo()/setFBillNo(),⽽idea⽣成的是getfBillNo()/setfBillNo()。

手动生成
在这里插入图片描述
lombok自动生成
在这里插入图片描述

引用:

⽹上不少说产⽣类似的问题@RequestBody获取的参数为null是由于springboot解析器在解析json过程中出现问题,因字段名驼峰命名⽆法匹配字段名导致。
spring框架在接收参数的时候的get()⽅法⽆法识别参数。

说的太笼统了,也⽆法解答我的困惑。

从postman传⼀个json到接⼝,json在传输过程中会被转为“字节流”。controller层的@RequestBody加在实体类参数前⾯,会把接收到的字节流反序列成为⼀个java实体类。
@RequestBody在反序列化的时候给实体类赋值使⽤的get/set⽅法是同idea⾃动⽣成的get/se⽅法,即:getfBillNo()/setfBillNo()。
所以@RequestBody是⽤setfBillNo()给是实体类TestDto赋值,但在TestDto类中setcEnterpriseId()是不存在的,TestDto类中只有setFBillNo(),setfBillNo() 不等于 setFBillNo()。

当然其实也可以不加@JsonProperty注解,只需修改⼀下postman传参的⼤⼩写就⾏了。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,需要确定@RequestBody是用于绑定HTTP请求的HTTP请求主体(body)到方法参数或方法返回值上的注解。当使用@RequestBody注解时,SpringBoot会自动将处理程序方法参数绑定到HTTP请求主体中的JSON对象上。 如果@RequestBody的请求主体JSON为null,则有可能是请求的Content-Type与数据类型不匹配。例如,请求的Content-Type为application/json,但是请求体的格式不是JSON,或者请求体中的JSON格式存在问题,导致SpringBoot无法将其转换为对象。 解决这个问题需要按照以下步骤进行: 1. 确认请求主体是否为null,这可以通过在方法中打印日志或使用调试器进行调试来实现。 2. 确认请求头中的Content-Type是否与请求主体的数据格式相匹配。 3. 确认请求体中的JSON格式是否正确,可以使用JSON 校验工具确认。 4. 如果以上步骤均无法解决问题,则可以考虑使用自定义JSON反序列化器。 在自定义反序列化器中,可以通过添加注解@JsonDeserialize(using = CustomDeserializer.class)来指定自定义反序列化器。这样,在接收到JSON请求主体时,SpringBoot会使用自定义反序列化器将JSON数据转换为Java对象。如果仍然无法解决问题,可以查看SpringBoot的日志文件,查找相关错误信息进行解决。 总之,当SpringBoot的@RequestBody接收JSON为null时,需要仔细检查请求格式是否正确并考虑使用自定义反序列化器解决问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值