Класс построителя Java с JsonDeserialize Необязательные поля, установленные как Optinal.empty. Установить значение по умолчанию, когда JsonDeserialize - PullRequest
0 голосов
/ 12 февраля 2020

Установка значений по умолчанию при десериализации JSON

ObjectMapper om;

String jsonStudent = {"id":"1"}

синтаксический анализ студента json для объекта Student

Student student = om.readValue(message.getBody(), Student.class);

Calss Student

@Getter
@JsonDeserialize(builder = Student.StudentBuilder.class)
@Builder(builderClassName = "StudentBuilder", toBuilder = true)
public class Student {
    private Optional<String> studentName;
    private String id;
    @JsonPOJOBuilder(withPrefix = "")
    public static class StudentBuilder {
    }
}

I ' я ожидаю объект ученика поля типа

id: 1

studentName: Optional.empty.

но десериализовать имя студента рассматривать как ноль. Как я могу справиться с этим. без использования неявных значений по умолчанию и всех контуров Arg.

1 Ответ

1 голос
/ 12 февраля 2020

Джексон имеет набор модулей, которые работают с типами данных JDK 8, включая Необязательный.

Сначала добавьте последнюю версию как зависимость Maven:

<dependency>
   <groupId>com.fasterxml.jackson.datatype</groupId>
   <artifactId>jackson-datatype-jdk8</artifactId>
   <version>2.10.2</version>
</dependency>

Затем все, что вам нужно для этого нужно зарегистрировать модуль в ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Jdk8Module());

ПРИМЕЧАНИЕ. Как уже сказано @ Hadi_J , объявление свойств объекта json как Optional - плохая практика!

...