前端用指定pattern格式的时间字符串,后端用Date或者LocalDateTime类型的时间
方案:使用@JsonFormat与@DateTimeFormat注解
@Data public class TimeParamDto { @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern ="yyyy-MM-dd" ) private Date startDate; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss" ) private LocalDateTime startDatetime; }
此时是字符串类型
controller接受到已经由字符串变成Date类型(或者LocalDateTime)
@GetMapping("/date-test") public TimeParamDto paramTimeGetTest(TimeParamDto dto){ System.out.println(dto.getStartDate());//Thu Dec 23 00:00:00 CST 2021 System.out.println(dto.getStartDatetime());//2021-12-23T12:12:12 return dto; }
由Date类型变成字符串,方便展示
{ "startDate": "2021-12-22", "startDatetime": "2021-12-23 12:12:12" }
入参,用于格式化前端传给服务器字符串类型的时间
//pattern可以自定义 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
出参,用于服务器传给前端json数据时对Date类型时间进行的格式化
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
pattern就表示需要转变的格式,timezone表示处在的时区(国内是东八区)
get请求,@DateTimeFormat和@JsonFormat注解可以同时使用,时间格式也可以不一致,推荐
post请求时,如果同时使用@DateTimeFormat和@JsonFormat注解,他们的时间格式必须一样,不推荐
注意加上@Data注解