#java #json #jackson #jackson-databind #jackson-modules
#java #json #джексон #jackson-databind #jackson-modules
Вопрос:
У меня есть этот код:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.registerModule(new MrBeanModule());
и этот тестовый пример:
SearchResultContainer src = objectMapper.readValue("{}", SearchResultContainer.class);
SearchResultContainer
это интерфейс POJO (вот и вся причина, по которой MrBean здесь используется).
Почему это не удается со следующим исключением?
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.ctc.rets.dto.search.SearchResultContainer` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [Source: (String)"{}"; line: 1, column: 1]
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1451)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1027)
at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:265)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2992)
at com.ctc.web.client.CustomRestTemplateTest.test1(CustomRestTemplateTest.java:25)
Комментарии:
1. Какую версию
Jackson
вы используете? Я проверил это с помощью версии2.9.8
, и это работает должным образом.2. Отлично! У меня была старая версия в пути. 2.4.0 с версией jackson 2.9.5. Обновил все до 2.9.8, и теперь все работает нормально.
Ответ №1:
Неправильная версия MrBean найдена в pom.xml .
Исправить:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-mrbean -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-mrbean</artifactId>
<version>2.9.8</version>
</dependency>