背景:
@JsonFormat(pattern=“yyyy-MM-dd”) 将Date转换成String 一般后台传值给前台时
@JsonFormat会让时间以0区时间显示(格林尼治时间)。如果直接使用会少了8小时(我所在的是北京时区)修改为
@JsonFormat(pattern=“yyyy-MM-dd”,timezone=“GMT+8”)
/**更新时间 用户可以点击更新,保存最新更新的时间。**/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime;
这样做有弊端,timezone相当于写死在注解中,如果很多地方使用,不便维护
JsonSerialize
@JsonSerialize 此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个时间或double时在其后面限制两位小数点。
自定义Serializer 并继承JsonSerializer 指定泛型date:
public class DateTimeSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
if(date != null) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String output = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).format(formatter);
jsonGenerator.writeString(output);
}else {
jsonGenerator.writeString("");
}
}
}
引用:
@JsonSerialize(using = DateTimeSerializer.class)
private Date updateTime;
结果:
“updateTime”: “2018-12-17 16:39:26”,