Spring boot 2.x不再默认将 java.util.Date 序列化为 timestamp(时间戳)

在当下的前后端分离的开发环境下,对于传输时间数据的格式众说纷纭,但我仍然认为传递时间戳timestamp更合理,这样后端程序勿需关注前端时间的表现形式,更能应对一对多(同一后端代码,拥有多个前端)的需求。

spring boot 1时,被@ResponseBody修饰的返回值中如果存在java.util.Date类型,jackson会默认被序列化为timestamp(一个数字串)的形式。

1
2
3
4
5
6
7
8
9
@RestController
public class HelloController {

@GetMapping("/hello")
public Model hello() {
return new Model(1, new Date());
}
}

以上述代码为例,在 spring boot 2后,不再默认序列化,而是格式化为下图格式:

如果需要序列化为时间戳,在application.yaml配置文件中添加时间格式化配置即可。

1
2
3
4
spring:
jackson:
serialization:
WRITE_DATES_AS_TIMESTAMPS: true

如果是application.properties文件,添加

1
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=true

这样一来,前端得到的数据又可以是timestamp了。