正如@MiserableVariable所指出的,傑克遜默認情況下將(大部分)日期字段序列化爲(數字長)時間戳。您可以通過多種方式覆蓋此行爲。
如果使用自己的ObjectMapper的情況下,重寫一個屬性寫日期爲ISO-8601:
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
如果使用自己的ObjectMapper的情況下,有寫在自己的自定義格式的日期:
objectMapper.setDateFormat(myDateFormat); // 1.8 and above
objectMapper.getSerializationConfig().setDateFormat(myDateFormat); // for earlier versions (deprecated for 1.8+)
離開對於大多數字段的默認序列化行爲,但覆蓋它在某些對象的某些字段,可使用自定義序列:
public class MyBean implements Serializable {
private Date postDate;
// ... constructors, etc
@JsonSerialize(using = MyCustomDateSerializer.class)
public Date getPostDate() {
return postDate;
}
}
public class MyCustomDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(final Date date, final JsonGeneraror generator,
final SerializerProvider provider) throws IOException,
JSONProcessingException {
generator.writeString(yourRepresentationHere);
}
}
所有這些信息都可以在Jackson Documentation中找到,其中大部分信息在section中處理日期處理。
您是否做過任何搜索?我很快發現我沒有使用傑克遜,但一個快速搜索導致我http://wiki.fasterxml.com/JacksonFAQDateHandling:'objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);' –
是的,但我認爲問題在於使用泛型的反序列化器,因爲Jackson不知道這是一個日期還是什麼 – James2707