Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java joda.time.DateTime反序列化错误_Java_Json_Datetime_Serialization_Deserialization - Fatal编程技术网

Java joda.time.DateTime反序列化错误

Java joda.time.DateTime反序列化错误,java,json,datetime,serialization,deserialization,Java,Json,Datetime,Serialization,Deserialization,我尝试反序列化日期时间为attibute的类: import org.joda.time.DateTime; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserial

我尝试反序列化日期时间为attibute的类:

import org.joda.time.DateTime;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer;
import com.fasterxml.jackson.datatype.joda.ser.DateTimeSerializer;

class MyClass {

    private DateTime alertTimestamp;

    private String name;

    @JsonSerialize(using = DateTimeSerializer.class)
    public DateTime getAlertTimestamp() {
        return alertTimestamp;
    }

    @JsonDeserialize(using = DateTimeDeserializer.class)
    public void setAlertTimestamp(DateTime now) {
        this.alertTimestamp = now;
    }

    //...
}
但当我尝试tro反序列化时,我有一个例外:

com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer has no default (no arg) constructor
我使用它来反序列化:

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonData, MyClass.class);
我的jsonData的一个例子:

{    
    "name":"test",
    "alertTimestamp":       {"year":2014,"era":1,"dayOfMonth":24,"dayOfWeek":1,"dayOfYear":83,"weekOfWeekyear":13,"weekyear":2014,"monthOfYear":3,"yearOfEra":2014,"yearOfCentury":14,"centuryOfEra":20,"millisOfSecond":232,"millisOfDay":45143232,"secondOfMinute":23,"secondOfDay":45143,"minuteOfHour":32,"minuteOfDay":752,"hourOfDay":12,"zone":{"uncachedZone":{"cachable":true,"fixed":false,"id":"America/Los_Angeles"},"fixed":false,"id":"America/Los_Angeles"},"millis":1395689543232,"chronology":{"zone":{"uncachedZone":{"cachable":true,"fixed":false,"id":"America/Los_Angeles"},"fixed":false,"id":"America/Los_Angeles"}},"afterNow":false,"beforeNow":false,"equalNow":true}
}

@JsonDeserialize
需要一个带有无参数构造函数的
JsonDeserializer
。最新版本的
DateTimeDeserializer
没有这样的构造函数

如果您已经固定了格式,即
alertTimestamp
应该只是一个时间戳,那么您可以简单地使用
ObjectMapper
注册
JodaModule
。它将在内部为
DateTime
字段使用
DateTimeDeserializer
。您可以去掉
@jsondesialize
注释

mapper.registerModule(new JodaModule());

您需要添加
jackson数据类型joda
库。

您能否澄清
timestamp
vs
alertTimestamp
?很抱歉,这是一个错误,是什么JSON生成器在
jsonData
中生成了JSON
DateTimeSerializer
未序列化为该格式。根据类
DateTimeDeserializer
具有公共无参数构造函数。这就产生了一个问题:您是否有正确的导入或适当的jar版本?@MenoHochschild您能提供一个示例吗?@arcone您想要一个什么示例?我想出来了-这是DateTime的Spring响应问题。我在GlassFish中遇到了一个bug,它拒绝我注册
JodaModule
:-(是否有其他方法应用反序列化方法?@thomas.mc.work您需要为
DateTime
字段注册自定义反序列化程序。