Джексон десериализуется с отсутствующими полями и не создает исключения

#json #spring-boot #jackson #deserialization

Вопрос:

Пытаюсь с помощью этого простого приложения

 public class JsonTest {

    public static void main(String[] args) throws Exception {
        String json = "{"name":"john"}";
        System.out.println(json);
        ObjectMapper objectMapper = new ObjectMapper();
        Person person = objectMapper.readValue(json, Person.class);
        System.out.println(person);
    }

    @Data
    private static class Person {
        String name;
        Integer age;
    }

} 
 

Я не понимаю, почему он не создает исключения.

Это дает мне

 {"name":"john"}
JsonTest.Person(name=john, age=null)
 

Я также пытался добавить objectMapper .configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true); или даже добавить @NotNull или @JsonProperty(required = true) перед Integer age , но это не возымело никакого эффекта.

Единственное решение, которое я нашел, — это после десериализации проверить, равен ли возраст нулю.

Есть ли другое решение ?

Комментарии:

1. Вы пытались добавить @AllArgsConstructor в класс Person?

2. Просто пытался. С единственным @AllArgsConstructor , что у меня есть (no Creators, like default constructor, exist): cannot deserialize from Object value . Я также добавил @NoArgsConstructor , но с тем же результатом. Не исключение.

3. и по какому поводу @AllArgsConstructor(onConstructor=@__(@JsonCreator)) ?

4. Ты имеешь в виду @Data @AllArgsConstructor(onConstructor=@__(@JsonCreator)) private static class Person ? Это дает мне Argument #0 has no property name, is not Injectable: can not use as Creator