正如@MiserableVariable 所指出的,Jackson 默认将(大多数)日期字段序列化为(数字长)时间戳。您可以通过多种方式覆盖此行为。
如果使用您自己的 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中找到,其中大部分在处理日期处理的部分中。