我必须将我的POJO转换为JSON字符串才能发送到客户端代码。
但是当我执行此操作时,我的POJO中的java.util.Date
字段(具有值" 2107-06-05 00:00:00.0
")会被翻译为" 1496592000000
&# 34;我认为这是时代以来的一段时间。我希望它在Json中更具可读性,可能是在DD / MM / YYYY'格式。
我在Spring Boot应用程序中使用RestEasy
控制器,它处理Java对象到JSON的转换。
任何线索出了什么问题?
答案 0 :(得分:3)
RestEasy通过Jackson支持JSON,因此您可以通过多种方式处理Date
序列化。
如果您想格式化特定字段,只需将@JsonFormat注释添加到您的POJO。
public class TestPojo {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
public Date testDate;
}
如果要全局设置Date
序列化格式,则必须调整Jackson配置属性。例如。用于application.properties
文件格式。
首先禁用WRITE_DATES_AS_TIMESTAMPS
serialization feature:
spring.jackson.serialization.write-dates-as-timestamps=false
第二个定义日期格式:
spring.jackson.date-format=dd-MM-yyyy
或者,对于application.yml
文件格式:
spring:
jackson:
date-format: "dd-MM-yyyy"
serialization:
write_dates_as_timestamps: false
如果您想完全控制序列化,则必须实现自定义StdSerializer。
public class CustomDateSerializer extends StdSerializer<Date> {
private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
public CustomDateSerializer() {
this(null);
}
public CustomDateSerializer(Class t) {
super(t);
}
@Override
public void serialize(Date date, JsonGenerator generator, SerializerProvider provider)
throws IOException, JsonProcessingException {
generator.writeString(formatter.format(date));
}
}
然后将其与@JsonSerialize:
一起使用public class TestPojo {
@JsonSerialize(using = CustomDateSerializer.class)
public Date testDate;
}