Десериализация необязательных обнуляемых полей в Джексоне - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть класс 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.

1 Ответ

0 голосов
/ 18 февраля 2019

Et voilà!

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

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

см. whatever как значение @JsonProperty.Вы можете добавить все, что не пусто, но не id.
И, кстати, это должно быть своего рода ошибка.


Помните, что может 't быть null, поскольку внутренний value имеет примитивный тип.И объект-оболочка все равно не будет нулевым.


Используя JsonCreator с JsonUnwrapped, вы не можете иметь null EmployeeId

enter image description here


Я всегда проверяю свой код.Работает.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...