You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot:无需重复@JsonProperty实现Jackson构造Record对象

针对你遇到的Jackson无法反序列化带@Builder和@With注解的Java Record问题,有两种不需要给每个字段加@JsonProperty的解决方案:

1. 使用Lombok的@Jacksonized注解(推荐)

Lombok的@Jacksonized注解专门用于让生成的Builder兼容Jackson的反序列化机制,它会自动为Builder类添加Jackson所需的元数据,让Jackson可以通过Builder正确创建Record实例,同时自动映射字段。

修改后的代码:

@Jacksonized
@Builder
@With
public record MyDTO(
  String field1,
  String field2
) { }

原理:@Jacksonized会让Lombok为Builder生成带@JsonCreator注解的构造方法,并确保Builder的属性与Record字段一一对应,Jackson就能自动识别并完成反序列化,无需手动指定@JsonProperty。

2. 显式声明Record构造器并添加@JsonCreator

如果不想引入@Jacksonized,可以显式写出Record的构造器,并添加Jackson的@JsonCreator注解指定属性模式:

@Builder
@With
public record MyDTO(String field1, String field2) {
  @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
  public MyDTO {
    // 可选:添加字段验证或初始化逻辑,空实现也可
  }
}

原理:通过@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)告诉Jackson,使用该构造器并根据属性名称匹配参数,这样Jackson就能正确绑定JSON字段到Record的参数上。

补充说明

你的问题本质是Lombok的@Builder注解生成的代码干扰了Jackson对Java Record默认构造器的识别(Java Record的规范构造器是隐式生成的全参构造器)。上面两种方法都是让Jackson能正确找到并使用Record的构造逻辑,避免手动重复标注@JsonProperty。

内容的提问来源于stack exchange,提问作者mitchkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:55:16