Джексон: десериализовать все виды несуществующих списков в пустые списки. ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Джексон: десериализовать все виды несуществующих списков в пустые списки.

Сообщение Anonymous »

Учитывается следующий SampleTestClass, в котором я пытаюсь преобразовать JSON в Java:

Код: Выделить всё

class EmptyListDeserializerTest {

final ObjectMapper objectMapper = new ObjectMapper();

{
objectMapper.configOverride(List.class)
.setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY, Nulls.AS_EMPTY));
}

@Test
void test2() throws JsonProcessingException {
final var result = objectMapper.readValue("null", new TypeReference() {});

assertThat(result).isEmpty();
}

@Test
void test3() throws JsonProcessingException {
final var json = """
[{
"name": "John Doe",
"address": null
}]
""";
final var result = objectMapper.readValue(json, new TypeReference() {});

assertThat(result.get(0).address).isEmpty();
}

@Test
void test4() throws JsonProcessingException {
final var json = """
[{
"name": "John Doe"
}]
""";
final var result = objectMapper.readValue(json, new TypeReference() {});

assertThat(result.get(0).address).isEmpty();
}

public static class MyClass {

public MyClass() {
}

private String name;

public MyClass(final String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setName(final String name) {
this.name = name;
}
}

public static class MyComplexClass {

public MyComplexClass() {
}

private String name;
private List address;

public MyComplexClass(final String name, final List address) {
this.name = name;
this.address = address;
}

public String getName() {
return name;
}

public void setName(final String name) {
this.name = name;
}

public List getAddress() {
return address;
}

public void setAddress(final List address) {
this.address = address;
}
}
}
Я хочу сопоставить все виды несуществующих списков с пустыми списками.
Адаптация самих сущностей не является задачей решение.
Только ObjectMapper можно адаптировать.
Я испробовал все возможные решения, но мне удалось пройти только test3, все остальные не сработали.Я также попробовал CustomerDeserializer, но он так и не был вызван, хотя и был зарегистрирован:

Код: Выделить всё

public List deserialize(JsonParser p, DeserializationContext ctxt)
Итак, чего мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/791 ... mpty-lists

Вернуться в «JAVA»