我如何比较JSON中的LocalDateTime在对象中具有相同文件的对象中解析出来并忽略比较中的毫秒?



我正在测试这个场景:

我在我的测试中有一个对象,它有一个LocalDateTime

当我通过objectmap创建一个JSON的对象,结果会不同,因为在JSON对象我有毫秒和我没有。

将响应体中的内容与字符串out of object进行比较:

assertThat(jsonOutOfTheObject, is(objectMapper.writeValueAsString(object)));
对象LocalDateTime

字段中的应该是这样的:

2022-06-30T19:42:57.118286

和JSON-body中的

2022-06-30T19:42:57

所以它们不一样,测试就会失败。

我尝试了truncatedTo(ChronoUnit.SECONDS)withNano(0),但它们并不总是给我有效的结果,因为如果毫秒将超过500000,它们将其四舍五入。

解决方案吗?

更新:

我注意到截断工作得很好,问题是JSON中的LocalDateTime值已被四舍五入!

我添加了这个代码来处理四舍五入:

private static final int MILLISECOND_EDGE_FOR_ROUND_UP = 500000000;
private LocalDateTime roundUpSecond(LocalDateTime date) {
if (date.getNano() > MILLISECOND_EDGE_FOR_ROUND_UP) {
return date.plusSeconds(1).truncatedTo(ChronoUnit.SECONDS);
}
return date.truncatedTo(ChronoUnit.SECONDS);
}

我想这是一个序列化问题。
你必须有一个自定义的JsonSerializer,因为ObjectMapper不能处理LocalDateTime开箱,据我所知。
因此必须在某个地方有一个序列化模式,如SimpleDateFormat("dd-MM-yyyy hh:mm:ss")。将毫秒数添加到此模式中,您的比较应该没问题。

相关内容

  • 没有找到相关文章

最新更新