在spring boot 1.x
的时候,被@ResponseBody
修饰的返回值中如果存在java.util.Date
类型,则会默认被序列化为timestamp
的形式,如:
@RestController
public class TestController {
@GetMapping("/test")
public Object test(){
return new Date();
}
}
返回为:
当升级为spring boot 2.0.2
的时候,在代码不变的情况下,返回值为:
通过调试,发现原因在于spring boot 2.0.2
中的org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration
类中多了如下代码:
static {
Map<Object, Boolean> featureDefaults = new HashMap<>();
featureDefaults.put(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
FEATURE_DEFAULTS = Collections.unmodifiableMap(featureDefaults);
}
即,在不加配置的情况下,spring boot 2.0.2
版本中,返回值中的java.util.Date
类型不再默认序列化为timestamp
如果需要仍然按照之前的方式序列化,需要在application.yml
中增加如下配置:
spring:
jackson:
serialization:
WRITE_DATES_AS_TIMESTAMPS: true
可能是因为没有仔细看文档导致出现了这个问题,记录下来供遇到同样问题的小伙伴们参考。
spring:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。