项目中经常会出现对请求时间格式和响应时间格式处理的数据,这里整理一下方便大家使用,除了Date 外其他类型也可以自行扩展序列化规则
一、返回装换:JsonSerializer
自定义返回时间格式为 时间戳 Long 或 字符串: yyyy-MM-dd HH:mm:ss
对应的实体类字段加上注解: @JsonSerialize(using = DateJsonSerialize.class)
/**
* 时间处理: 返回时间戳
* <P> 字段上添加 @JsonSerialize(using = DateJsonSerialize.class) 注解 </P>
* @author wangsong
* @mail 1720696548@qq.com
* @date 2020/11/21 0021 14:19
* @version 1.0.0
*/
public class DateJsonSerialize extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null) {
// value 为时间时,返回时间戳,字段上添加 @JsonSerialize(using = DateJsonSerialize.class) 注解
if (value.getClass().isAssignableFrom(Date.class)) {
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String format = sdf.format((Date) value);
// gen.writeString(format);
String time = ((Date) value).getTime() + "";
gen.writeString(time);
}
}
}
}
二、接收转换 Deserialize
自定义接收时间格式为 时间戳 Long 或 字符串: yyyy-MM-dd HH:mm:ss 转为实体类对应数据
对应的实体类字段上或set方法上添加注解: @JsonDeserialize(using = DateJsonDeserialize.class)
public class DateJsonDeserialize extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser p, DeserializationContext ctx) throws IOException {
String text = p.getText();
if(StringUtils.isBlank(text)){
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = sdf.parse(text);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}