利用JsonSerialize优雅的实现数据类型转换

一、

需求简介:希望通过注解的方式,批量的将时间格式化为预期的格式。

JsonSerialize简介:com.fasterxml.jackson.databind.annotation包提供的序列化的注解

什么是序列化:

将一个对象编码成一个字节流(I/O);而与之相反的操作被称为反序列化。

序列化的目的是为了方便数据的传递以及存储到磁盘上(把一个Java对象写入到硬盘或者传输到网路上面的其它计算机,这时我们就需要将对象转换成字节流才能进行网络传输。对于这种通用的操作,就出现了序列化来统一这些格式)

二、实战 

1、首先自定义一个类继承JsonSerializer去重写serialize方法,里面实现具体数据类型转换逻辑

@Slf4j
public class DataFormatSerializeer extends JsonSerializer {

  @Override
  public void serialize(String dateStr, JsonGenerator jsonGenerator,
      SerializerProvider serializerProvider) throws IOException {
    if (StringUtils.isNotBlank(dateStr)) {
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
      Date date = null;
      try {
        date = dateFormat.parse(dateStr);
        Timestamp time = new Timestamp(date.getTime());
        jsonGenerator.writeString(DateUtils.convertSqlTimeStampToUtc(time, "UTC-4",
            DateUtils.ISO8601_DATE_TIME_FORMAT));
      } catch (ParseException e) {
        log.error("date convert error");
      }
    } else {
      jsonGenerator.writeString("");
    }
  }
}

2.应用

  @JsonSerialize(using = DataFormatSerializeer.class)//这里引用我们自定义的类
  private String date;

你可能感兴趣的:(技术专栏,java,springboot,spring,json)