2012-06-27 85 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。