JSON和Lombok构造函数的java问题Jackson反序列化
杰克逊对我的Dto反序列化有问题。我使用的是Lombok 1.18.16和Jackson(Jackson databind)2.11.3
我的课程是这样的:
@Data
public class Dto {
@JsonProperty("ID")
private Long id;
@JsonProperty("STATUS")
private Long status
@JsonProperty("CONTACT_ID")
private Long contactId;
@JsonProperty("TITLES")
private List<Text> titles;
@JsonProperty("DESCRIPTIONS")
private List<Text> descriptions;
}
文本类是这样的:
@Data(staticConstructor = "of")
public class Text {
@JsonProperty("ID")
private final Long id;
@JsonProperty("LABEL")
private final String label;
}
当Jackson解析这个时,我得到一个异常,声明如下:
Cannot construct instance of `com.mycompany.Text` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 35, column: 13] (through reference chain: com.mycompany.Dto["TITLES"]->java.util.ArrayList[0])
我理解这与我的文本类的构造函数有关,但我不确定为什么——因为我是通过Lombok提供构造函数的
我使用的JSON如下所示:
{
"ID": "1",
"STATUS": "1",
"CONTACT_ID": "1",
"TITLES": [
{
"ID": 215,
"LABEL": "Title"
}
],
"DESCRIPTIONS": [
{ "ID":"0", "LABEL":"Description" }
]
}
我错过了什么?还有,有没有办法使用Lombok为构造函数创建可选参数?当我想创建一个新的标题时(那么id还不存在),就会出现这种情况
谢谢大家的意见
# 1 楼答案
当您使用
@data
时,您包括@Getter
、@Setter
、@ToString
、@EqualsAndHashCode
和@RequiredArgsConstructor
,因为jackson需要反序列化默认构造函数,所以您应该添加@noargsconstuctor# 2 楼答案
您缺少@noargsconstuctor