
@RequestBody接收某些参数为null
问题描述在⽤postman测试的时候,发现有⼀个参数fBillNo明明有传值的,但接⼝controller接收到的该参数为null,我把参数也直接返回了,但其他参数都不为null的。
结论:实体中参数fBillNo命名不规范导致的,没有按照标准“驼峰法”进⾏参数命名,而myName符合标准则没有这个问题。骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
解决方式一 将fBillNo改为符合驼峰标准:fbillNo 将fBillNo改为全小写:fbillno 解决方式二 如图,使用@JsonProperty注解,直接在不规范的参数上加上@JsonProperty(value=“fBillNo”) 来解决
因为使用了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传参的⼤⼩写就⾏了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)