背景
搭了一个初始工程,使用的是spring boot 2.2.6。结果发现LocalDateTime返回到前端后变成了数组。
网上找了遍都是不知道哪抄的,没一个行的。
问题根源
还是通过查看源码的方式,发现默认序列化情况下会使用kotlin SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
。所以打印出数组。
@Override
public void serialize(LocalDateTime value, JsonGenerator g, SerializerProvider provider)
throws IOException
{
if (useTimestamp(provider)) {
//走了这里,有兴趣的可以跟进去看看
g.writeStartArray();
_serializeAsArrayContents(value, g, provider);
g.writeEndArray();
} else {
//实际走这里就可以定义自己的formatter
DateTimeFormatter dtf = _formatter;
if (dtf == null) {
dtf = _defaultFormatter();
}
g.writeString(value.format(dtf));
}
}
解决办法
因此,我们看到需要设置formatter。然后根据源码是在extendMessageConverters
中找到对应的json的converter,配置dateFormat即可。当然有其他配置也可以在这里修改。
在我们的配置类中重写extendMessageConverters
即可,感觉这才是最正常的配置方法。。
@Configuration
class WebConfig: WebMvcConfigurationSupport()
override fun extendMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
super.extendMessageConverters(converters)
messageConverters.forEach {
if (it is AbstractJackson2HttpMessageConverter){
it.objectMapper.dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
it.objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
}
}
}