#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