java - 在 Jackson 中反序列化可选的可为空字段

标签 java json jackson

我有一个 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
}

我希望字段 previousEmployeeidnull,但它被分配了一个值 123

最佳答案

瞧瞧!

final class EmployeeId {
    @JsonProperty("id")
    private final long value;

    @JsonCreator
    public EmployeeId(@JsonProperty("whatever") long value) {
        this.value = value;
    }
}

whatever视为@JsonProperty值。您可以输入空的任何内容,但不能输入id
顺便说一句,这一定是某种错误。

<小时/>

记住它不能为null,因为内部是原始类型。而且包装对象无论如何都不会为空。

<小时/>

JsonCreatorJsonUnwrapped 结合使用,您不能拥有 null EmployeeId

enter image description here

<小时/>

我总是测试我的代码。它有效。

enter image description here

关于java - 在 Jackson 中反序列化可选的可为空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753759/

相关文章:

java - 使用 Jackson 将 JSON 反序列化为具有重载方法的对象

python - 在 Pandas 中重新索引并转换为 json

java - @JsonPropertyOrder 不适用于 jackson-module-jsonSchema

java - flatMap 需要不必要的转换

Java - 不同时区的当前时间

javascript - 无法访问 JSON 数据并出现错误 404 (TMDB)?

java - 修复 java.lang.ClassNotFoundException : com. fastxml.jackson.annotation.JsonAutoDetect

java - 如果输出 json 具有带点(.) 字符的键,如何在 Spring 中为 Rest api 创建域类

java - 使用 Map<String,Object> 字段反序列化 Avro 中的对象会返回错误类的值

java - 网格中的 GXT 复选框