whi*_*618 5 java spring-boot localdate
我想签署 jwt 令牌,LocalDateTime该令牌是在创建用户后收到的。之后,我需要检查 jwt 是否有效,并且我通过从数据库检索的日期来实现这一点。
问题是LocalDateTime创建时包含纳秒,而数据库中的日期不包含纳秒,然后验证失败。
我尝试通过格式化LocalDateTime以显示没有纳秒的日期来解决此问题,但还有另一个问题。LocalDateTime四舍五入为下限(例如,1.222 为 1,1.777 为 1),并且插入数据库中的日期四舍五入为 1.222 为 1,1.777 为 2,因此验证再次失败。
我设法通过@Column(columnDefinition = "TIMESTAMP (6)")在实体中添加我的字段来解决此问题,现在纳秒也存储在数据库中,并且一切正常,但我不确定这是正确的解决方案。
那么有没有更好的解决方案呢?我可以以某种方式LocalDateTime与数据库中的舍入相同(并将数据库字段类型保留为DATETIME而不是TIMESTAMP),或者可以将数据库日期舍入为LocalDateTime。
我正在使用 Spring Boot 2.2.4
我相信这个问题在评论中已经有了答案。所以为了让大家清楚这一点,我\xe2\x80\x99d想总结一下讨论的解决方案。
\n\n你说
\n\n\n\n\n在将 LocalDateTime 保存到数据库之前截断它可能是最好的解决方案,因为我不需要存储毫秒。
\n
可以这样做:
\n\n yourLocalTime = yourLocalTime.truncatedTo(ChronoUnit.SECONDS);\nRun Code Online (Sandbox Code Playgroud)\n\n这可以确保这些值落在整秒上。不会发生进一步的截断或舍入。因此,从这一点来看,价值观是一致的。
在我看来,TIMESTAMP(6)在问题中提到的数据库中使用是一个非常好的解决方案。
我不\xe2\x80\x99t 认为你会想要做的是尝试模仿你的数据库舍入该值的方式。这需要大量的测试来验证您是否在所有极端情况下都以完全相同的方式进行操作。我们可能不知道数据库是否使用 \xe2\x80\x9cround 甚至 \xe2\x80\x9d、\xe2\x80\x9cround half up\xe2\x80\x9d 或其他舍入。我们甚至可能不确定它是否会在下一版本的数据库引擎中发生变化。
\n\n链接:维基百科文章:舍入
\n| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |