正如@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