Fasterxml json от нуля до «ноля»
у меня урок
@Data
class Person {
@JsonProperty(value="name", defaultValue = "null")
private String name = "null";
@JsonProperty(value="surName", defaultValue = "null")
private String surName= "null";
}
Когда я пытаюсь десериализовать строку типа {"name":null, "surName":null} с помощью
new ObjectMapper().readValue(json, Person.class);
У меня есть объект с нулевыми полями, но мне нужно с «нулевыми» полями. Как это сделать?
1 ответ
НедвижимостьdefaultValue
аннотации @JsonProperty не приводит к фактической установке значения по умолчанию и используется только в информационных целях. Это может ввести в заблуждение, но именно так сейчас реализован Джексон: https://fasterxml.github.io/jackson-annotations/javadoc/2.14/com/fasterxml/jackson/annotation/JsonProperty.html#defaultValue--
Установка значения по умолчанию для полей Java, вероятно, также не будет работать, поскольку на самом деле эти свойства есть в вашем JSON, поэтому установщики будут фактически вызваны и перезапишут исходные «нулевые» значения (вы можете проверить это с помощью отладчика).
Простым решением было бы установить@JsonSetter(nulls = Nulls.SKIP)
:
Рабочий пример:
@Data
public class Person {
@JsonProperty
@JsonSetter(nulls = Nulls.SKIP)
private String name = "null";
@JsonProperty
@JsonSetter(nulls = Nulls.SKIP)
private String surName = "null";
}
public class PersonTest {
@Test
public void testDeserializePerson() throws JsonProcessingException {
var result = new ObjectMapper().readValue("{\"name\":null, \"surName\":null}", Person.class);
assertEquals(result.getName(), "null");
assertEquals(result.getSurName(), "null");
}
}