为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕少森 2022-06-23 19:27:46
我有一个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。
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

你去吧!


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

//img1.sycdn.imooc.com//62b44e530001232107100249.jpg

我总是测试我的代码。有用。

//img1.sycdn.imooc.com//62b44e6000011d4907850311.jpg


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信