我有一个 Employee
类,我想像这样序列化:
class Employee {
String name;
@JsonUnwrapped
EmployeeId id;
@JsonUnwrapped(prefix = "previousEmployee")
EmployeeId previousEmployeeId;
}
final class EmployeeId{
@JsonProperty("id")
private final long value;
@JsonCreator
public EmployeeId(@JsonProperty("id") long value) {
this.value = value;
}
}
序列化Employee
给出以下json:
{
"name":"foo",
"id" : 123,
"previousEmployeeid" : 456
}
但是,previousEmployeeId
是可选的。因此,如果我尝试反序列化此 json,它会将 id
放入 previousEmployeeId
字段。我做错了什么?
{
"name":"foo",
"id" : 123
}
我希望字段 previousEmployeeid
为 null
,但它被分配了一个值 123
。
最佳答案
瞧瞧!
final class EmployeeId {
@JsonProperty("id")
private final long value;
@JsonCreator
public EmployeeId(@JsonProperty("whatever") long value) {
this.value = value;
}
}
将whatever
视为@JsonProperty
值。您可以输入非空的任何内容,但不能输入id
。
顺便说一句,这一定是某种错误。
记住它不能为null
,因为内部值
是原始类型。而且包装对象无论如何都不会为空。
将 JsonCreator
与 JsonUnwrapped
结合使用,您不能拥有 null
EmployeeId
我总是测试我的代码。它有效。
关于java - 在 Jackson 中反序列化可选的可为空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753759/