首先时间格式很多
具体有多少种 可参考:cn.hutool.core.date.DatePattern hutool工具类定义的常量
两个注解的注意事项
// 前端 -> 后端时间处理。 请求体传 2021-10-26 15:12:49 。不可传:2021-10-26T15:12:49 。请求头不可以
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime startTime;
// 前端 -> 后端时间处理。请求头可以,请求体不可以 (意思指:json入参)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
我测试的时候,心情异常复杂。你说两个注解,在闹呢?
常见格式
// yyyy-MM-dd HH:mm:ss 2021-09-08 21:21:36
// yyyy-MM-dd'T'HH:mm:ss 2021-09-08T21:21:36
// EEE MMM dd HH:mm:ss zzz yyyy jdk Wed Sep 08 21:21:36 CST 2021
一般数据库是 dateTime或者bigint(个人更加推荐使用bigint),不管用什么样的,最重要的是统一!统一!统一!
若mysql使用 DateTime java可能用LocalDateTime(2021-09-08T21:21:36) 去接,
1-前端传参:2021-09-08T21:21:36
2-前端传参 :2021-09-08 21:21:36 对应dto字段上使用
// import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
若是bigint可以写个统一转换过滤器,或者写个工具类等等吧
测试
入参是:
// 2021-09-16T09:24:20.620Z 可以
// 2021-09-16T09:24:20 可以
// 2021-09-16 09:24:20 不可以 抛出 JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime` from String "2021-09-16 09:24:20": Failed to deserialize java.time.LocalDateTime
private LocalDateTime createTime;
// 加上
// import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
// 2021-09-16 09:24:20 可以
// 2021-09-16T09:24:20.620Z 不可以
// 2021-09-16T09:24:20 不可以
总结
vo处理
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class TestTimeVo {
// 后台 -> 前台 时间格式处理
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private LocalDateTime startTime;
}
前端展示
{
"startTime": "2021-10-26 15:18:43"
}
DTO 处理
@Data
public class TimeDTo {
// 前端 -> 后端时间处理。 请求体传 2021-10-26 15:12:49 不可传:2021-10-26T15:12:49 请求头不可以
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime startTime;
}
前端入参:
{
"startTime": "2021-10-26 15:18:43"
}