Пример:
У меня есть ответ: [{"keyFirst": "value"}, {"keySecond": ["some-value"]}], где SomeClass.class:
Код: Выделить всё
String keyFirst;
List keySecond;
Я пробовал это сделать через собственный десериализатор с его регистрацией в 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)
);
}
Может быть, у кого-то есть опыт решения подобной задачи? Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... by-element
Мобильная версия