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

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

编码文章call10242025-01-07 10:20:5837A+A-

问题描述

前端使用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]"

根因定位

@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;

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4