
Spring Boot 默认支持将 JSON 数组自动绑定到 DTO 中的 List<Long> 字段,但需确保 JSON 键名与 Java 字段名(或其标准 getter/setter 命名)严格匹配,尤其注意驼峰命名规则与 Lombok 生成逻辑的一致性。
spring boot 默认支持将 json 数组自动绑定到 dto 中的 `list
在 Spring MVC(含 Spring Boot)中,@RequestBody 自动将 JSON 请求体反序列化为 Java 对象,底层依赖 Jackson。当 DTO 中声明如下字段时:
@Data
public class MyDto {
private String title;
private List<Long> kpartIds; // 注意:小写 k + 大写 p → 驼峰字段名
}Lombok 会自动生成 getKpartIds() 和 setKpartIds(List<Long>) 方法。Jackson 默认使用 JavaBeans 规范解析字段:它将 getKpartIds() 方法映射为 JSON 键 kpartIds(即把 getter 前缀 get 去掉,首字母小写,后续大写字母转为小写并连写),而非 kPartIds 或 kpackIds。
✅ 正确的 JSON 请求体应为:
{
"title": "Test",
"kpartIds": [5, 10]
}❌ 常见错误包括:
- JSON 键写成 kPartIds(误认为按原字段拼写)→ Jackson 查找不到对应 setter;
- 字段名本身含连续大写字母(如 kPackIds),导致 Lombok 生成 getKPackIds(),Jackson 映射为 kPackIds(非 kpackIds),造成不匹配;
- 使用了 @JsonProperty("kPartIds") 但未同步更新 getter/setter 或忽略 Lombok 行为。
? 验证与调试建议:
-
显式标注字段(推荐用于关键字段):
@Data public class MyDto { private String title; @JsonProperty("kpartIds") private List<Long> kpartIds; } - 检查实际生成的字节码:用 IDE 查看 Lombok 编译后的真实 getter 名称(如 getKpartIds() 还是 getKPartIds()),确认 Jackson 实际匹配的 key;
-
启用 Jackson 日志(开发期):
logging: level: org.springframework.http.converter.json: DEBUG可观察反序列化过程中的字段匹配日志。
? 总结:JSON 键名必须与 Jackson 解析出的属性名完全一致;Lombok 不改变字段语义,但影响 getter 命名逻辑;优先使用语义清晰、符合 Java 驼峰规范的字段名(如 kpartIds 而非 kPartIds),避免大小写歧义。

















