1.目前环境条件:
①mysql数据库中存储的时间字段类型为:datetime
②:springboot中存储的类型为:LocalDateTime
③前端代码:
javascript
<el-col :span="24">
<el-form-item>
<div slot="label">运维日期<font color="red">*</font></div>
<el-date-picker
v-model="form.itemTime"
value-format="yyyy-MM-dd HH:mm:ss "
class="filter-item"
type="daterange"
range-separator="至"
start-placeholder="运维开始日期"
end-placeholder="运维结束日期"
:clearable="false"
/>
</el-form-item>
</el-col>
2.报错的问题:
java
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime` from String "2024-03-06": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2024-03-06' could not be parsed at index 10; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "2024-03-06": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2024-03-06' could not be parsed at index 10
后端报错的问题:
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime` from String "2024-03-06": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2024-03-06' could not be parsed at index 10; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "2024-03-06": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2024-03-06' could not be parsed at index 10
3.解决方法:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("om_modify_time")
private LocalDateTime modifyTime;
在实体类字段上加上:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
4.原因:
org.springframework.http.converter.HttpMessageNotReadableException
异常是Spring框架在尝试将HTTP请求体中的JSON数据转换为Java对象时抛出的异常。该异常指出在解析JSON时遇到了问题。
在这个具体的例子中,异常信息表明在尝试将字符串 "2024-03-06"
反序列化为 java.time.LocalDateTime
类型时失败了。java.time.LocalDateTime
需要一个完整的日期和时间(如 yyyy-MM-dd'T'HH:mm:ss
),而 "2024-03-06"
只提供了一个日期,没有提供时间信息,因此无法被正确解析。
要解决这个问题,你有几个选项:
-
更改JSON数据:确保发送到服务器的JSON数据包含完整的日期和时间信息。
-
使用
java.time.LocalDate
代替java.time.LocalDateTime
:如果你的字段只包含日期信息,那么应该使用LocalDate
类型而不是LocalDateTime
。 -
自定义日期格式 :如果你不能更改JSON数据,并且确实需要解析这种格式的日期,你可以使用
@JsonFormat
注解来指定自定义的日期格式。然而,请注意,这仅适用于LocalDate
,因为LocalDateTime
需要时间信息。 -
使用
@DateTimeFormat
:如果你使用的是Spring MVC的@RequestParam
或@ModelAttribute
,你可以使用@DateTimeFormat
注解来指定日期格式。 -
全局配置:在Jackson的配置中设置全局的日期格式。