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