2016-08-28 58 views
4

我正在使用Java 8和最新的RELEASE版本(通過Maven)Gson。 如果我序列化LocalDate我得到這樣的使用Gson序列化Java 8 LocalDate爲yyyy-mm-dd

"birthday": { 
     "year": 1997, 
     "month": 11, 
     "day": 25 
} 

,我寧願"birthday": "1997-11-25"。 Gson是否還支持更簡潔的開箱即用格式,或者我是否需要爲LocalDate s實現自定義序列化程序?

(我試過gsonBuilder.setDateFormat(DateFormat.SHORT),但是這似乎並沒有發揮作用)

+0

http://stackoverflow.com/questions/6873020/gson-date-format應該指出你在正確的方向。 –

+0

您很可能需要安裝[自定義TypeAdapter](http://www.javadoc.io/doc/com.google.code.gson/gson/2.7) –

+2

查看'com.google。 gson.internal.bind'沒有'LocalDate'的類型適配器(在gson 2.7中)。 –

回答

9

直至另行通知,我實現了一個自定義序列,像這樣:

class LocalDateAdapter implements JsonSerializer<LocalDate> { 

    public JsonElement serialize(LocalDate date, Type typeOfSrc, JsonSerializationContext context) { 
     return new JsonPrimitive(date.format(DateTimeFormatter.ISO_LOCAL_DATE)); // "yyyy-mm-dd" 
    } 
} 

它可以安裝例如像這樣:

Gson gson = new GsonBuilder() 
     .setPrettyPrinting() 
     .registerTypeAdapter(LocalDate.class, new LocalDateAdapter()) 
     .create();