猿问

反序列化杰克逊中的可选可空字段

我有一个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,它会将 inid放入previousEmployeeId字段中。我究竟做错了什么?


{

  "name":"foo",

  "id" : 123

}

我希望该字段previousEmployeeid是,null但它被分配了一个值123。


慕少森
浏览 80回答 1
1回答

慕无忌1623718

你去吧!final class EmployeeId {    @JsonProperty("id")    private final long value;    @JsonCreator    public EmployeeId(@JsonProperty("whatever") long value) {        this.value = value;    }}查看whateveras@JsonProperty值。您可以放入任何不为空但不是id.顺便说一句,这一定是某种错误。记住它不可能null,因为内部value是原始类型。并且包装对象无论如何都不会为空。JsonCreator与您一起使用JsonUnwrapped不能有null EmployeeId我总是测试我的代码。有用。
随时随地看视频慕课网APP

相关分类

Java
我要回答