@DateTimeFormat日期失真
Get请求参数@RequestBody PageReqVo pageReqVo 有个字段是createTime 为LocalDateTime[],通过注解
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
时间变成1970-01-01T08:00
@RequestBody 与 @DateTimeFormat 的不兼容性:
@RequestBody 通常用于处理 HTTP 请求体中的数据,这些数据通常以 JSON 或 XML 等格式发送。@DateTimeFormat 注解是专门用于将 String 类型的请求参数(如通过 URL 的查询参数或表单数据发送的)转换为 Java 的日期/时间类型(如 LocalDateTime)。然而,它不适用于 @RequestBody 注解的情况,因为 @RequestBody 已经指示 Spring 使用 HTTP 消息转换器(如 Jackson)来解析 JSON 数据为 Java 对象。
LocalDateTime[] 的处理:
当你尝试通过 @RequestBody 将 JSON 数组(如 ["2023-01-01T12:00:00", "2023-01-02T13:00:00"])转换为 LocalDateTime[] 时,你依赖的是你的 JSON 库(如 Jackson)的默认行为或你可能已配置的自定义序列化/反序列化器。@DateTimeFormat 在这种情况下不会被触发。
时间变为 1970-01-01T08:00:
这个具体的时间(1970-01-01T08:00)很可能是由于解析错误或默认值引起的。如果 LocalDateTime[] 数组中的某个元素解析失败(比如格式不正确),那么相应的 LocalDateTime 实例可能会保持为默认值(通常是 Java 8 日期时间类的原点,即 Unix 纪元时间,即 1970-01-01T00:00:00Z)。但是,由于时区问题(如果你的环境默认时区为东八区),显示时可能会调整为 1970-01-01T08:00
原文链接:https://blog.csdn.net/hijamesk/article/details/141228575