Я ищу решение для десериализации JSON Джексона для экземпляра класса, не нарушая весь процесс, в настоящее время, когда я делаю что-то вроде:
Если Actor.class был похож:
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonPropertyOrder(alphabetic = true)
public abstract class BaseDTO {
}
public class Character extend BaseDTO {
private LocalDateTime updatedDate;
private String name;
// Setters and getters
}
и десериализовать JSON {"updatedDate":"N/A", "name": "Jon Snow"}
как:
String json = "{\"updatedDate\":\"N/A\", \"name\": \"Jon Snow\"}";
ObjectMapper mapper = new ObjectMapper();
final Character character = mapper.reader().forType(Character.class).readValue(json);
Или как Play Framework напрямую:
final Character character = Json.fromJson(json, Character.class);
Я определенно получу исключение, подобное:
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "N/A": Text 'N/A' could not be parsed at index 0
И InvalidFormatException
на самом деле JsonProcessingException
, есть также MismatchedInputException
и другие исключения, поэтому мне нужно как-то грациозно продолжить обработку и получить объект character
и иметь значение name
как минимум вместо остановки это вообще.
Я предпочитаю:
- Используйте аннотации для настройки парсера или любого решения, которое будет применено к
BaseDTO
.
- Регистрация проблемы в файле журнала, чтобы я знал, что случилось что-то не так.
Я действительно не могу найти дорогу сейчас без огромных усилий, поэтому мне интересно, есть ли какое-нибудь готовое решение, сделайте это без переизобретения колеса.