Скажем, у меня есть следующий класс:
public class MyPojo {
public ZonedDateTime now;
}
Чтобы преобразовать Map<String, Object>
в этот POJO, в соответствии с https://stackoverflow.com/a/16430704/1225328, ObjectMapper#convertValue
можно использовать:
Map<String, Object> myMap = new HashMap<String, Object>(){{
put("now", ZonedDateTime.now());
}};
ObjectMapper objectMapper = new ObjectMapper();
MyPojo myPojo = objectMapper.convertValue(myMap, MyPojo.class);
Приведенный выше код завершается ошибкой, например:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.ZonedDateTime` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
Я думаю, что Джексон сначала "десериализовал" значение ZonedDateTime
карты в Map<String, Object>
, а затем пытается восстановить экземпляр ZonedDateTime
изэта сгенерированная карта для установки свойства POJO now
.
Мне не нужно что-то умное;есть ли способ сообщить Джексону "если вы найдете на входной карте значение того же типа, что и свойство POJO, имя которого соответствует ключу, то просто установите его и продолжайте"?