Java Jackson不支持ISO日期格式

Java Jackson不支持ISO日期格式,java,json,date,jackson,Java,Json,Date,Jackson,编写同时支持Xml和JSON媒体类型的web服务。遵循ISO标准以支持日期格式yyyy-MM-dd'T'HH:MM:ss.SSSXXX 为了在xml中支持这种格式,我编写了一个DateAdapter类,它负责对日期字段进行封送和取消封送处理。 Json格式有一个自定义序列化和反序列化类。它的实现几乎类似于适配器类。但它抛出了一个例外 @Override public void serialize(Date aDate, JsonGenerator aJsonGenerator, Seri

编写同时支持Xml和JSON媒体类型的web服务。遵循ISO标准以支持日期格式
yyyy-MM-dd'T'HH:MM:ss.SSSXXX

为了在xml中支持这种格式,我编写了一个
DateAdapter
类,它负责对日期字段进行封送和取消封送处理。
Json格式有一个自定义序列化和反序列化类。它的实现几乎类似于适配器类。但它抛出了一个例外

@Override
    public void serialize(Date aDate, JsonGenerator aJsonGenerator, SerializerProvider aSerializerProvider)
            throws IOException, JsonProcessingException {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
        String dateString = dateFormat.format(aDate);
        aJsonGenerator.writeString(dateString);
    }
例外情况:

Illegal pattern character 'X'
    at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:768)
使用jackson v2.2.1 工作适配器实现完全相同


Java 7中添加了
SimpleDataFormat
模式字母
X
。您必须使用较低版本的JRE


约普·艾根(Joop Eggen)的评论修正了这个问题。来自SimpleDataFormat的简单日期格式(“yyyy-MM-dd'HH:MM:ss.SSSXXX”)到简化格式(“yyyy-MM-dd'HH:MM:ss.SSSZ”)修复了该问题。

您可以创建反序列化程序并将其用作@Annotation

公共类TemporalDeserializerLocalDateTime扩展JsonDeserializer{

@Override
public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationCtx)
        throws IOException, JsonProcessingException {
        ObjectCodec oc = jsonParser.getCodec();
        String content = oc.readValue(jsonParser, String.class);
        return LocalDateTime.parse(content);
    }
}
公共类付费资源{

@JsonDeserialize(using = TemporalDeserializerLocalDateTime.class)
    private LocalDateTime paymentDate;
}

那么Z而不是XXX?或XXXX呢?请务必查看实际使用的java版本的api文档。@JoopEggen您说得对。谢谢您的回答。@HimanshuYadav这并不能解释错误消息。另外,不允许使用四个
X
。嗯
Z
并不能完全解决错误。日期w使用
Z
看起来像
2014-08-06T13:18:30.504-0400
但是使用
XXX
看起来像
2014-08-06T13:18:30.504-04:00
那么为什么
SimpleDateFormat
在为我用于Xml响应的
XmlAdapter
类工作呢。@HimanshuYadav我不这么认为。
XmlAdapter
是专业的bably未使用。抱歉。但事实并非如此。如果我删除XmlAdapter,响应将以不同的格式出现。不过我已经找到了解决方案。
@JsonDeserialize(using = TemporalDeserializerLocalDateTime.class)
    private LocalDateTime paymentDate;
}