背景
编写了一个 [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 发起一个请求,请求参数如下:
后端调试看到的结果是这样的:
可以看到部分请求参数为空,而代码的编写逻辑并没有错误。
解决方法
导致部分参数字段为 null 的原因是当某一个字段满足以下条件:
- 首字母小写
- 第二个字母大写
因此,解决方法有两种思路。一种是将破坏上面的条件,即将相关字段重命名为:aname 和 aage。
但有时候,为了代码风格,我们可能难以做出这种修改,因此可以尝试另一种解决方法。
使用 @JsonProperty 标注字段,然后利用该注解中的属性名来传递参数,使用方法如下:
@Data
public class TestDTO {
@JsonProperty("aName")
private String aName;
@JsonProperty("aage")
private String aAge;
private String name;
private String age;
}
再次发起请求,可以成功接收参数了: