Angular发送到后端Java的请求中日期格式的问题

发布于 2022-09-12 00:36:08 字数 1555 浏览 18 评论 0

环境介绍

我的前端使用的是Angular8(现在好像已经9了吧),UI控件使用的是 ng-zorro-antd的一套。后端使用的是 Java8 + SpringBoot + Mybatis + MySQL

我的问题

发送给后端的请求中(使用post发送一个对象)有日期类型的属性(Angular中该属性的定义是:bill_date:Date;),导致新增一行数据时出错,我在后端在控制器中打印日志,都没看到日志被打印出来(打印封装好的对象),浏览器的 network 标签页中看到错误如下:

{"timestamp":"2020-01-09 08:30:08","status":400,"error":"Bad Request","message":"JSON parse error: Cannot deserialize value of type `java.util.Date` from String \"2020-01-14T00:30:01.159Z\": not a valid representation (error: Failed to parse Date value '2020-01-14T00:30:01.159Z': Unparseable date: \"2020-01-14T00:30:01.159Z\"); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String \"2020-01-14T00:30:01.159Z\": not a valid representation (error: Failed to parse Date value '2020-01-14T00:30:01.159Z': Unparseable date: \"2020-01-14T00:30:01.159Z\")\n at [Source: (PushbackInputStream); line: 1, column: 60] (through reference chain: com.ccsoft.atools.model.RoadTrip[\"bill_date\"])","path":"/atoolsbe/roadTrip/insert"}

这个是日期格式不对导致将参数封装为对象时出错,然后我在 Java的实体类的该日期类型的属性上加了注解@DateTimeFormat(pattern\="yyyy-MM-ddTHH:mm:ss.SSSZ")仍然报一样的错误。

解决思路

我的想法是,应该有两种途径解决这个问题吧。一个是在前端将日期格式转换为类似 yyyy-MM-dd HH:mm:ss,然后后端接收到请求后可以顺利封装为对象,第二种方法就是在后端能将格式为2020-01-14T00:30:01.159Z的日期值转换格式后封装到对象中。遗憾的是两种方法我都不知道如何去做。。。
望好心人来科普下。万分感谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千笙结 2022-09-19 00:36:08

使用json传数据的时候使用的是jackson,并不是spring自己的转换机制,所以DateTimeFormat不起作用,应使用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
以及如果是spring-boot,可以直接配置

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

设置全局的json的日期时间格式

一枫情书 2022-09-19 00:36:08

加上@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")就能将json字符串格式化为yyyy-MM-dd HH:mm:ss

我不吻晚风 2022-09-19 00:36:08

补充下,有两种解决的方法,看下图
两种解决日期格式的方法.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文