Java与Json之间的数据传输问题

一、时间格式转换

场景:

后端在数据类型为Date的情况下,返回的时间戳为毫秒格式为:12345678987000,多了三个0,而前端需要的是单位的时间戳,所以后端需要把Date转为Long去掉三个0

数据传输方向:

后端==》前端

1. 转换工具类

继承JsonSerializer<T>类并重写方法

public class Date2LongSerialize extends JsonSerializer<Date> {

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider 		serializerProvider) throws IOException, JsonProcessingException {
        
        jsonGenerator.writeNumber(date.getTime()/1000);
    }
}

2. Date属性字段添加注解

该方法比较繁琐,需要每个类的每个Date属性上添加注解,不推荐

在传输类(DTO)上加上注解,并指定转换类

/** 创建时间. */
@JsonSerialize(using = Date2LongSerialize.class)
private Date createTime;

@JsonSerialize(using = Date2LongSerialize.class)
/** 更新时间. */
private Date updateTime;

二、后端必须NULL值处理

场景:

后端传递给前端的参数为非必须字段且值为null时,可以不必传输该字段,前端也不会显示该字段,例如该字段:"name": null

数据传输方向:

后端==》前端

方法一

在实际传输的类上添加注解指定该类下的null值不传输

但是该方法在类多时比较繁琐,不推荐

@JsonInclude(JsonInclude.Include.NON_NULL)

方法二

通过配置文件进行全局配置

spring:
  jackson:
    default-property-inclusion: non_null

三、后端非必须NULL值处理

后端传递给前端的参数为必须字段但是值为null时,且需要后端传递空列表或者空字符串,可以给传输类的属性字段赋予初始值,但是,阿里巴巴规范中不推荐这么做

返回空列表

List<OrderDetail> orderDetailList = new ArrayList<>();

返回空字符串

private String buyerName = "";

猜你喜欢

转载自www.cnblogs.com/guaosky/p/12818588.html