2012-06-27 48 views
6

WRT以下问题:JAX-RS杰克逊JSON提供日期格式问题

Jersey + Jackson JSON date format serialization - how to change the format or use custom JacksonJsonProvider

我想知道

  • 是杰克逊指定的JSON日期格式应该归到UNIX时间整数?

后续问题...

  • 出现了工作的立场随时更改最近?
  • 不应该将日期格式标准化为由jaxb xml输出提供的相同格式吗?
  • 为什么/为什么不呢?
  • 为解决这个问题付出了什么努力?
  • RestEasy提供了一种json提供者缓解方法,可以以普遍可识别的日期格式输出json日期吗?

回答

11

对不起的人大声叫喊 - 我在这里找到答案

http://wiki.fasterxml.com/JacksonFAQDateHandling

这里

http://wiki.fasterxml.com/JacksonFAQ#Serializing_Dates

这里

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

这里

http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/map/util/StdDateFormat.html

使用@JsonSerialize(使用= ...)方式:

public class JsonStdDateSerializer 
extends JsonSerializer<Date> { 
    private static final DateFormat iso8601Format = 
    StdDateFormat.getBlueprintISO8601Format(); 

    @Override 
    public void serialize(
    Date date, JsonGenerator jgen, SerializerProvider provider) 
    throws IOException, JsonProcessingException { 

    // clone because DateFormat is not thread-safe 
    DateFormat myformat = (DateFormat) iso8601Format.clone(); 
    String formattedDate = myformat.format(date); 
    jgen.writeString(formattedDate); 
    } 
} 
+3

有人已经投票了这个答复。小心解释为什么?我自己也不太喜欢这个答案,但这些都是推荐的方法。你不能责怪我或我的回答,因为jaxb和杰克逊之间存在分歧。你将不得不对这两个组织进行咆哮。 –

2

这也是一个功能上ObjectMapper(至少在1.9.11控制,并可能更早):

ObjectMapper om = new ObjectMapper(); 
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); 
om.writer().writeValue(System.out, objectWithDateProperty); 

我不明白如何声明性地做对象定义itsel的等价物F。