JSON和Lombok构造函数的Jackson反序列化问题



我的Dto的Jackson反序列化出现问题。我使用的是Lombok 1.18.16和Jackson(Jackson数据绑定(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])

我知道这与我的Text类的构造函数有关,但我不确定为什么——因为我是通过Lombok提供构造函数的。

我使用的JSON如下所示:


{
"ID": "1",
"STATUS": "1",
"CONTACT_ID": "1",
"TITLES": [
{
"ID": 215,
"LABEL": "Title"
}
],
"DESCRIPTIONS": [
{ "ID":"0", "LABEL":"Description" }
]

}

我错过了什么?此外,有没有一种方法可以使用Lombok为构造函数创建一个可选参数?当我想创建一个新标题时(那么id还不存在(,就会出现这种情况。

感谢您的意见!

您缺少@NoArgsConstructor。

@NoArgsConstructor
public class Text {
...
}

当您使用@data时,您包括@Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor,因为jackson需要反序列化默认构造函数,您应该添加@NoArgsConstructor。

最新更新