JavaScript 日期到 Java LocalDateTime

标签 javascript java http datetime

在服务器上,日期字段是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/

相关文章:

javascript - Angularjs 应用程序不打开配置的模式

Javascript:优化具有多种颜色的大文本的插入

java - 检查输入的数组并显示错误并且该错误处于循环中

google-chrome - 让 Firefox 缓存 exe 下载

javascript - REST API 创建一个或多个资源?

java - 点击后按钮(图像)不改变

java - 编译和运行 Java 控制台应用程序 OS X 终端时出现问题

rest - 经过身份验证的 REST api 的 HTTP 缓存

asp.net - IIS 以两个响应响应单个请求

javascript - 参数可选