spring mvc 设置responsebody时间序列化
问题:
使用spring boot 2.0 后, 较新的spring mvc HttpMessageConverters 如果存在jackson 库时,则默认使用自动配置的Jackson2ObjectMapperBuilder生成的转换器对消息进行转化。 序列化的结果可能并不是我们期望的,这时我们需要通过设置。 spring的官方文档地址: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
例如下代码:
@PostMapping(value = "/sql/{env}/{service}")
@ResponseBody
public ResponseEntity
@RequestBody SqlRequestVo sqlRequestVo) {
log.info(sqlRequestVo.getEnv());
log.info(env);
log.info(sqlRequestVo.toString());
SqlResponseVo sqlResponseVo = sqlServiceImpl.runSql(env, service, sqlRequestVo.getSql());
return new ResponseEntity<>(sqlResponseVo, HttpStatus.OK);
}
return 的对象,会自动被springmvc 将java object 序列化成json或者xml 返回给http client客户端。(序列化城json还是xml,取决于客户端请求的accept参数值) 序列化的规则,是spring mvc 默认的序列化方式,如果我们需要改变默认的序列化方式时,则需要针对序列化的特性特定进行配置。
@Data
public class SqlResponseVo {
String status;
int count;
String message;
JSONArray data;
public SqlResponseVo() {
status = "";
count = 0;
message = "";
}
public SqlResponseVo(String status, String message, JSONArray data) {
this.status = status;
this.count = 0;
this.message = message;
this.data = data;
}
}
例如: sqlResponseVo中的jsonarray中包含了sql date类型,例如 [{“date”:时间值}], 那么返回给客户端的json 则date会直接转化为 格式化的时间格式 “2019-06-25T00:10:10 000Zxxx” 。 如果我们想返回时间戳(java时间秒的话),则需要针对Jackson2ObjectMapperBuilder 自动生成的消息转换器进行参数配置。
我们只需要在spring boot 的application.properties 中添加如下配置即可。
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=true
#(默认是false)
如果仅仅通过修改配置无法达到我们的期望时,我们就需要进行开发自定义的http message converter了。
此篇文章已被阅读2122 次