专业的JAVA编程教程与资源

网站首页 > java教程 正文

SpringBoot @JsonFormat无法接收前端传递的日期字符串

temp10 2024-10-28 19:32:59 java教程 9 ℃ 0 评论

问题描述

前端使用dayjs进行日期格式化,后端java SpringBoot应用采用Jackson库的@JsonFormat标注进行字符串到日期类型的自动转换,但是调用时却提示如下错误:

"Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'beginDate'; Failed to convert from type [java.lang.String] to type [@com.fasterxml.jackson.annotation.JsonFormat java.util.Date] for value [2023-01-01 00:00:00]"

SpringBoot @JsonFormat无法接收前端传递的日期字符串

根因定位

@JsonFormat注解时需要先通过@RequestBody将入参参数映射到实体后,@JsonFormat注解才能去对时间格式进行约束,因为RequestBody注解主要针对Post请求,所以对Get请求无效,所以如果请求是Get请求,那么必然会出现上述错误。

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),所以只能发送POST请求。

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交

解决方案

方案1:将请求改为Post请求,在Controller方法上增加@RequestBody处理

方案2:在Java对象的属性上使用SpringBoot的另外一个标签@DateTimeFormat

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")

private Date beginDate;

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")

private Date endDate;

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表