需求
前端反序列化对象到后端,如果前后端对其中某一个字段格式不统一,借助 @JsonDeserialize 注解统一格式。例如,数据库保存的时间是毫秒,前端需要展示的格式为 yyyy-MM-dd HH:mm:ss 。
序列化的时候在字段上面加上 @JsonSerialize 注解。
@JsonSerialize
public class DateSerializer extends JsonSerializer<Long> {private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");@Overridepublic void serialize(Long value, JsonGenerator gen, SerializerProvider serializers)throws IOException {LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(value), ZoneOffset.of("+8"));gen.writeString(df.format(localDateTime));}}
放在字段上面实现序列化的时候转换格式:
@JsonSerialize(using = DateSerializer.class)private Long createTime;
@JsonDeserialize
反序列化和序列化差不多,实现的接口是 JsonDeserializer 。
public class DateDeserializer extends JsonDeserializer<Long> {private static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");@Overridepublic Long deserialize(JsonParser p, DeserializationContext ctxt)throws IOException {if (!StringUtils.hasText(p.getText())) {return null;}return LocalDateTime.parse(p.getText(), df).toInstant(ZoneOffset.of("+8")).toEpochMilli();}}
