Проблемы десериализации с Joda Time / Jackson 2 / Spring - Не удается создать экземпляр значения типа [простой тип, класс org.joda.time.DateTime]

Я получаю исключение при попытке десериализации строки JSON, которая содержит строки даты для POJO с использованием Joda.

Я использую Jackson2 с Spring и Robospice.

Я получаю следующее исключение:

Не удалось прочитать JSON: невозможно создать экземпляр значения типа [простой тип, класс org.joda.time.DateTime] из строкового значения ('2014-07-25T00:00:00'); нет однострокового конструктора / фабричного метода

Вот код, который у меня есть на данный момент:

MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter 
                            = new MappingJackson2HttpMessageConverter();

mappingJackson2HttpMessageConverter.getObjectMapper().registerModule(new JodaModule());
msgConverters.add(mappingJackson2HttpMessageConverter);

restTemplate.setMessageConverters(msgConverters);
HttpEntity<?> httpEntity = new HttpEntity<Object>(headers);

final ResponseEntity<HolidayList> responseEntity 
            = restTemplate.exchange(url, HttpMethod.GET, httpEntity,HolidayList.class);

Поля POJO определены так:

private DateTime departureDate;

У меня это работало в Jackson1... но я не могу заставить его работать в Jackson2.

2 ответа

Решение

Я считаю, что моя проблема была просто в том, что я запускал разные версии компонента Джексон Йода для всего остального.

В конце концов я сделал это в моем файле Gradle

String jacksonCore = 'com.fasterxml.jackson.core:jackson-core:'
String jacksonAnnotations = 'com.fasterxml.jackson.core:jackson-annotations:'
String jacksonDatabind = 'com.fasterxml.jackson.core:jackson-databind:'
String jacksonJoda='com.fasterxml.jackson.datatype:jackson-datatype-joda:'
String jacksonVersion = '2.4.1'


dependencies {

    compile jacksonCore + jacksonVersion
    compile jacksonAnnotations + jacksonVersion
    compile jacksonDatabind + jacksonVersion
    compile jacksonJoda + jacksonVersion

Для пользователей Maven: эта проблема возникает, когда вы используете jackson и joda, но забыли включить jackson-datatype-joda. Для последней версии Джексона на данный ответ (2.6.3) ниже приведены зависимости, которые вы должны включить в файл pom.

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.6.3</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.6.3</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-joda</artifactId>
        <version>2.6.3</version>
    </dependency>
Другие вопросы по тегам