杰克逊无法在不重复的情况下构建记录@JsonProperty(Spring Boot)



我有以下不可变的DTO:

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

Jackson不能构造这个记录对象

...
InvalidDefinitionException: Cannot construct instance of `com.package.MyDTO`
(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
...

我使用Java 18, Spring Boot 2.6.7和Jackson 2.13.3

我解决它的方法是指示Jackson在哪里注入哪个JSON属性:

@Builder
@With
public record MyDTO(
@JsonProperty("field1")
String field1,
@JsonProperty("field2")
String field2
) { }
但是,这种方法不能扩展并且容易出错(重复字段定义)。有没有可能使它没有@JsonProperty工作?

Jackson版本2.12.x支持记录。不需要在每个构造函数参数上使用@JsonProperty

问题是Spring使用了另一个包的不同的、可传递的、较旧的Jackson版本。

最新更新