我觉得我这篇文章价值一个亿,工作开发实际需求(@JsonSerializer,@JsonInclude使用 和毫秒值的格式化)

 

我觉得我这篇文章价值一个亿,工作开发实际需求(@JsonSerializer,@JsonInclude使用 和毫秒值的格式化)

原谅我标题党 ,不过用起来是真的牛逼呀 。 

需求一: 我们返回给前端json数据,那么你会发现我们的日期类型是毫秒值,我们前端呢 规定好要的是秒 而不是毫秒 

做法入下:

 

创建一个序列化类 我们这里取名叫做Date2LongSerializer 并且继承JsonSerializer<Date>

重写父类的serialize方法

在方法里面对数据做出处理 : 

根据我们的需求:


public class Date2LongSerializer extends JsonSerializer<Date> {

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
 
 

        jsonGenerator.writeNumber( date.getTime()/1000);

    }
}

然后在VO实体类做处理 :

 @JsonSerialize(using= Date2LongSerializer.class)
    private Date createTime ;
    @JsonSerialize(using= Date2LongSerializer.class)
    private Date updateTime ;

在我们的需要处理的字段上面使用该工具类(算是工具类)

@JsonSerialize(useing=Date2LongSerializer.class)

这样在通过调试就看到效果了  。 

为什么价值一个亿呢? 

通过这个例子我们可以举一反三,用来处理一些返回VO数据了。

需求二: 

我觉得我这篇文章价值一个亿,工作开发实际需求(@JsonSerializer,@JsonInclude使用 和毫秒值的格式化)

咦你看 ,orderDetailList这个字段为null ,前端处理比较麻烦 那么我们的需求就是  如果为null 的话 那么我们就不传送给前端 ,

如果有值的话还是传送 这个需求怎么实现呢 ?  

我们只需要在实体类上面标注上@JsonInclude(JsonInclude.include.not_null)就解决了 (原谅我的排版,和无限装逼的心抱歉)

还有问题,你看如果有很多VO难道在每一个VO的实体类上面都要加这个@JsonInclude(JsonInclode.include,non_null)这个注解 这也有点太麻烦了吧,o?  有没有全局 配置的方法 ?  哈哈哈哈哈好当然有了-->

在application.yml里面配置

spring.jackjson.default-property-inclusion : non-null

这也的话 我们就是实现了我们的需求了。 

需求三:

需求三是在我们需求二之上 的 。 需求二是我们返回给前端的不能为null ,如果是null的话就该字段就不返回了。 这是其一; 

那么如果我们说 如果是null  还需要返回 ,比如说 如果一个List字段 我没有值  那好 我们返回空数组就好的呀 。 如果是个String类型 我们返回给他的一个空字段串就可以了。 前端的约定就这样。 这也怎么弄呢? 

 

注意: 首先把需求二的全局配置spring.jackjson.default-property-inclusion:non-null  这个配置注释掉。

很简单 >  只需要 在VO实体类中 给这个字段初始化   如果 List xx = new ArrayList(); 这也就达到目的了  ,String xx=""; 

 我觉得我这篇文章价值一个亿,工作开发实际需求(@JsonSerializer,@JsonInclude使用 和毫秒值的格式化)

 

OK;

 

 

怎么样? 是不是很强大? O ?   respact 。

 

 

 

 

 

 

-----------------------------------------------------------------分割法  下面补充和上面关系不大------------------------------------------------------------

 

查缺补漏: 

时间的格式化:

毫秒值 怎么转换为时间日期格式 :

String times= "1557045866"

Date  date = new Date(times);

String form= new SimpleDateFormat("yyyy-MM-ss HH:mm:ss").format(date );

日期格式转换为毫秒值:

String date ="2019-5-2 12-12-00";
Date  date=  new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").parse(date);
date.getTime();//得到毫秒值