SpringBoot前后端分离Instant时间戳自定义解析

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

@Data
public 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<Instant> { @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<Instant> { @Override public void serialize(Instant instant, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(instant.toEpochMilli()); } }

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

@Data
public 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值