Настройка десериализации списка по элементуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Настройка десериализации списка по элементу

Сообщение Anonymous »

Необходимо поэтапно десериализовать список объектов. Как это можно сделать?
Пример:
У меня есть ответ: [{"keyFirst": "value"}, {"keySecond": ["some-value"]}], где SomeClass.class:

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

String keyFirst;
List keySecond;
Но вдруг вместо List я получаю в ответ через restclient Map. Весь список разбивается при десериализации. Как настроить поэлементную десериализацию, чтобы отсеивать сломанные объекты и выводить журнал?
Я пробовал это сделать через собственный десериализатор с его регистрацией в ObjectMapper.

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

@Slf4j
public class SafeSomeClassListDeserializer extends JsonDeserializer {

@Override
public List deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
List result = new ArrayList();

ArrayNode arrayNode = p.getCodec().readTree(p);

for (JsonNode node : arrayNode) {
try {
SomeClass myObject = p.getCodec().treeToValue(node, SomeClass.class);
result.add(myObject);
} catch (Exception ex) {
log.error("Error deserialization object: {}; Message: ", node, ex);
}
}

return result;
}
}
и

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

@Bean
public JsonTemplateToObjectMapper getMapper() {
SimpleModule module = new SimpleModule();
module.addDeserializer(List.class, new SafeSomeClassListDeserializer());

return new JsonTemplateToObjectMapper(
new ObjectMapper()
.enable(ALLOW_SINGLE_QUOTES)
.disable(WRITE_DATES_AS_TIMESTAMPS)
.disable(FAIL_ON_UNKNOWN_PROPERTIES)
.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL)
.setVisibility(FIELD, ANY)
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.registerModules(new JavaTimeModule(), module)
);
}
где JsonTemplateToObjectMapper — маппер из библиотеки, через которую я получаю данные от сервиса.
Может быть, у кого-то есть опыт решения подобной задачи? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... by-element
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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