博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot前后端分离Instant时间戳自定义解析
阅读量:5110 次
发布时间:2019-06-13

本文共 2111 字,大约阅读时间需要 7 分钟。

在SpringBoot项目中,前后端规定传递时间使用时间戳(精度ms).

@Datapublic class Incident { @ApiModelProperty(value = "故障ID", example = "1") private Integer id; @ApiModelProperty(value = "故障产生时间", allowEmptyValue = true) private Instant createdTime; @ApiModelProperty(value = "故障恢复时间", allowEmptyValue = true) private Instant recoveryTime; }

以上为简略实体类定义.

@Transactional(rollbackFor = Exception.class)    @PostMapping(path = "/incident")    public void AddIncident(@Valid @RequestBody Incident incident) { incident.setBusinessId(0); if (1 != incidentService.addIncident(incident)) { throw new Exception("..."); } }

在实际使用过程中,发现Incident中的createdTime以及recoveryTime数值不对.

排查故障,前端去除时间戳后三位(即ms数),则时间基本吻合.
因此,可以确定是SpringBoot在转换Instant时使用Second进行转换.

因此对于Instant类型的转换添加自定义解析(SpringBoot使用com.fasterxml.jackson解析数据).

注意,.此处需要分别实现序列化(后端返回前端数据)以及反序列化(前端上传数据).

public class InstantJacksonDeserialize extends JsonDeserializer
{ @Override public Instant deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { String text = jsonParser.getText(); Long aLong = Long.valueOf(text); Instant res = Instant.ofEpochMilli(aLong); return res; } }
public class InstantJacksonSerializer extends JsonSerializer
{ @Override public void serialize(Instant instant, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(instant.toEpochMilli()); } }

在涉及到Instant的属性上加上相应注解,代码具体如下:

@Datapublic class Incident { @ApiModelProperty(value = "故障ID", example = "1") private Integer id; @JsonSerialize(using = InstantJacksonSerializer.class) @JsonDeserialize(using = InstantJacksonDeserialize.class) @ApiModelProperty(value = "故障产生时间", allowEmptyValue = true) private Instant createdTime; @JsonSerialize(using = InstantJacksonSerializer.class) @JsonDeserialize(using = InstantJacksonDeserialize.class) @ApiModelProperty(value = "故障恢复时间", allowEmptyValue = true) private Instant recoveryTime; }

添加注解后,Instant对象能够按照ms精度进行解析.

 

https://www.cnblogs.com/jason1990/p/10028262.html

转载于:https://www.cnblogs.com/sjqq/p/10136945.html

你可能感兴趣的文章
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>