Joda Time / Jackson 2 / Spring的反序列化问题 - 无法实例化类型[simple type,class org.joda.time.DateTime]的值

时间:2014-08-10 19:48:47

标签: jackson jodatime spring-android

尝试使用Joda将包含日期字符串的JSON字符串反序列化为POJO时,我收到异常。

我将Jackson2与Spring和Robospice一起使用。

我收到以下异常:

  

无法读取JSON:无法实例化类型的值[simple type,   来自String值的类org.joda.time.DateTime]   (' 2014-07-25T00:00:00&#39);没有单字符串构造函数/工厂方法

这是我目前的代码:

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 个答案:

答案 0 :(得分:13)

对于Maven用户:当您使用jackson和joda但忘记包含jackson-datatype-joda时会出现此问题。对于本答案(2.6.3)中的最新jackson版本,以下是您必须包含在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>

答案 1 :(得分:8)

我认为我的问题只是因为我正在运行不同版本的jackson joda组件。

最后,我在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