Fork me on GitHub

SpringBoot-Java8Date

在SpringBoot和Feign使用Java8的Date类型,如LocalDate、LocalDateTime,会出现Format不符合常规的情况

Software Version
SpringBoot 1.5.13.RELEASE
Java 1.8.0_201

默认时间格式显示

1
2
3
4
5
6
7
8
9
10
11
12
// DefaultTimeBean
private LocalDate localDate;
private LocalDateTime localDateTime;
private LocalTime localTime;

public DefaultTimeBean(LocalDate localDate, LocalDateTime localDateTime, LocalTime localTime) {
this.localDate = localDate;
this.localDateTime = localDateTime;
this.localTime = localTime;
}

// getter and setter
  • 通过Rest获取
1
2
3
4
@GetMapping("/getDefaultJava8Time")
public DefaultTimeBean getDefaultJava8Time() {
return new DefaultTimeBean(LocalDate.now(), LocalDateTime.now(), LocalTime.now());
}
  • 结果
1
2
3
4
5
6
// 全部是以数组的形式返回,这不符合我们的开发规范,要在序列化/反序列化的时候就进行formart
{
localDate: [2019, 2, 19],
localDateTime: [2019, 2, 19, 15, 49, 10, 964000000],
localTime: [15, 49, 10, 964000000]
}

格式化时间显示

  • Maven
1
2
3
4
5
// 不需要写version
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
  • application.yml
1
2
3
4
spring:
jackson:
serialization:
WRITE_DATES_AS_TIMESTAMPS: false
  • 注解配置format规则
1
2
3
4
5
6
7
8
9
10
11
// TimeBean
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private LocalDate localDate;

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime localDateTime;

@JsonFormat(pattern = "HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
private LocalTime localTime;
  • 通过Rest获取

Get

1
2
3
4
@GetMapping("/getFormatJava8Time")
public TimeBean getFormatJava8Time() {
return new TimeBean(LocalDate.now(), LocalDateTime.now(), LocalTime.now());
}
  • 结果
1
2
3
4
5
{
localDate: "2019-02-19",
localDateTime: "2019-02-19 15:57:08",
localTime: "15:57:08"
}

Post

1
2
3
4
5
6
7
@PostMapping("/formatJava8Time")
public TimeBean postDateTime(@RequestBody TimeBean timeBean) {
System.out.println(timeBean.getLocalDate());
System.out.println(timeBean.getLocalDateTime());
System.out.println(timeBean.getLocalTime());
return timeBean;
}
  • 结果
1
2
3
4
5
{
"localDate": "2019-05-02",
"localDateTime": "2019-06-15 12:23:59",
"localTime": "15:12:23"
}

转载请注明出处


Thank you for your support.