Класс построителя Java с необязательными полями JsonDeserialize, установленными как Optinal.empty. Установите значение по умолчанию, когда JsonDeserialize

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

ObjectMapper om;

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

разобрать JSON студента в объект Student

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

Студенческий класс

@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 {
    }
}

Я ожидаю поля Student object, такие как

id : 1

studentName : Необязательный.пусто.

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


person Araf    schedule 12.02.2020    source источник
comment
Не объявляйте переменные-члены данных необязательными. это плохая практика.   -  person Hadi J    schedule 12.02.2020
comment
@HadiJ В моем новом случае с bissines используйте этот класс. Необязательное уже существующее поле   -  person Araf    schedule 12.02.2020


Ответы (1)


У Джексона есть набор модулей, которые работают с типами данных 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 является плохой практикой!

person donquih0te    schedule 12.02.2020