首先,我们要知道 springboot 默认使用 jackson 解析 json(当然这里也是可以配置使用其他 json 解析框架)。
在不配置其他 json 解析的情况下,我们可以通过 spring boot 提供的注解和配置 来让 jackson 帮助我们提高开发效率
使用 @ResponseBody @RequestBody, Date 类型对象入参,返回json格式化
解决方法如下:
1. application.properties中加入如下代码
1 | spring.jackson.date-format=yyyy-MM-dd HH:mm:ss |
2. 如果个别实体需要使用其他格式的 pattern,在实体上加入注解即可
1 | import org.springframework.format.annotation.DateTimeFormat; |
关于spring boot 时间类型支持我做了以下测试:
1) application.properties 配置注释,不添加注解:spring 无法接收时间参数(400),json 输出 "2018-03-29T09:45:31.513+0000"
2) application.properties 配置开启,不添加注解:仅支持 yyyy-MM-dd HH:mm:ss
的格式参数和 json 输出
3) application.properties 配置开启,实体添加 @JsonFormat(pattern = "yyyy-MM-dd")
,实体可接受 yyyy-MM-dd HH:mm:ss
和 yyyy-MM-dd
格式的参数,json输出格式为 yyyy-MM-dd,由此可见@JsonFormat是限制Date 类型 json 输出的,但是为什么对接受的类型也造成了影响?有待考证
4) application.properties 配置开启,实体添加 @DateTimeFormat(pattern = "yyyy-MM-dd")
,结果与第二条测试一样?貌似@DateTimeFormat
注解并没有生效?有待考证
5) application.properties 配置开启,实体添加 @JsonFormat
和 @DateTimeFormat
结果与第三条一样
结论:实际项目中 application.properties设置通用时间格式,个别属性需要特殊处理时,添加@JsonFormat
(@JsonFormat
自己好像就把这件事搞定了)
使用 @ResponseBody 时 忽略 json 中值为null的属性
1. application.properties中加入如下代码
1 | spring.jackson.default-property-inclusion=non-null |
或者在类上声明
@JsonInclude(JsonInclude.Include.NON_NULL)
1 | import java.io.Serializable; |