我觉得我这篇文章价值一个亿,工作开发实际需求(@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数据了。
需求二:
咦你看 ,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="";
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();//得到毫秒值