SpringMVC RequestBody 接收参数为 null 的解决方法

880 阅读1分钟

背景

编写了一个 [POST] 请求,接收请求体参数,相关的方法签名和参数实体如下:

 @PostMapping("/test-body-param")
 public void testBodyParam(@RequestBody TestDTO testDTO) {
     System.out.println(testDTO);
     return;
 }
 ​
 @Data
 public class TestDTO {
 ​
     private String aName;
     private String aAge;
 ​
     private String name;
     private String age;
 }

使用 postMan 发起一个请求,请求参数如下:

image-20230208101005378.png

后端调试看到的结果是这样的:

image-20230208101041502.png

可以看到部分请求参数为空,而代码的编写逻辑并没有错误。

解决方法

导致部分参数字段为 null 的原因是当某一个字段满足以下条件:

  • 首字母小写
  • 第二个字母大写

因此,解决方法有两种思路。一种是将破坏上面的条件,即将相关字段重命名为:anameaage

但有时候,为了代码风格,我们可能难以做出这种修改,因此可以尝试另一种解决方法。

使用 @JsonProperty 标注字段,然后利用该注解中的属性名来传递参数,使用方法如下:

 @Data
 public class TestDTO {
 ​
     @JsonProperty("aName")
     private String aName;
     @JsonProperty("aage")
     private String aAge;
 ​
     private String name;
     private String age;
 }

再次发起请求,可以成功接收参数了:

image-20230208101615872.png