在服务器上,日期字段是LocalDateTime类型。当我将它作为 Json 传递到前端时,它会转换为以下格式:"dd-MM-yyyy hh:mm:ss"
。
这是该字段在 DTO 中的样子:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
private LocalDateTime term;
这是从服务器接收的日期在前端的外观:
02-06-2020 04:15:05
在前端,我尝试获取当前日期并根据 DTO 格式进行转换:
term: moment().format("DD-MM-yyyy hh:mm:ss")
如果您在控制台中输出此日期,它将如下所示:
{"term":"02-06-2020 12:00:00"}
但是当我向服务器发送请求时,出现错误:SyntaxError: Unexpected end of JSON input
。我意识到这是由于 DTO 的日期格式造成的,因为如果 DTO 字段具有字符串 @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "dd-MM-yyyy hh:mm:ss")
,那么就不会出现错误,请求会成功通过。但为什么它不起作用,因为我以正确的形式输入了日期?看起来和服务器的响应一模一样,但还是不行?或者是否有更好的方法将日期时间从前端发送到服务器?
这是我从前端发送的请求:
const сard = {
name: "name",
description: "description",
term: moment().format("DD-MM-yyyy hh:mm:ss")
};
fetch({
url: `${API_BASE_URL}/cards`,
method: 'POST',
body: JSON.stringify(card)
});
最佳答案
问题出在日期格式上。为了使一切正常工作,必须在服务器上为 LocalDateTime
字段安装以下 JsonFormat
:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
我不太明白为什么,但它只能这样工作。如果您编写 YYYY
而不是 yyyy
或编写 hh
而不是 HH
,来自前端的查询将返回错误。这是一个有点奇怪的解决方案,但它确实有效。
在前端,我使用 moment.js 将日期转换为以下格式:
moment().format("YYYY-MM-DDTHH:mm:ss")
请求成功执行后
关于JavaScript 日期到 Java LocalDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62158385/