我有以下不可变的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版本。