json
数据,处理封装和返回,国内很多开发者喜欢用fastjson
,其实这都无所谓,但 Springboot
提供对Jackson
的自动配置spring-boot-starter-json
,它才是Springboot
支持的默认json lib
。所以,如果是简单的Springboot
项目,推荐用Jackson
。
简单的数据转换,这篇博客总结的很全。这里主要想分享几个不常见、但作用很强大的注解。用得恰当,能解决一些特殊需求。
使用依赖前面提过,Springboot
做了自动配置,依赖如下就行。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </dependency>
1、@JsonIgnore
这个注解用在对象属性上,将对象转成json
时,该属性会被忽略,也就是说不会被转到json
字符串中。这个注解还可以用到对象属性,这样整个对象会被忽略。
@JsonIgnore private Date createTime; @JsonIgnore BizXxxDTO xxxDTO;
2、@JsonProperty
对属性重命名,对象序列化和反序列化常被用到。
序列化和反序列化分两种,最初序列化是指将Java
对象转成byte[]
数组,这样这个就能将对象传递和保存。
将对象输出到文件中,差不多如下形式。
[48, 57, 0, 5, 72, 101, 108, 108, 111, 115, 114, 0, 16, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 68, 111, 117, 98, 108, 101, -128, -77, -62, 74, 41, 0, 1, 68, 0, 5, 118, 97, 108, 117, 101, 120, 114, 0, 16, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 78, 117, 109, 98, 101, 114, -122, -84, -107, 29, 11, -108, -32, -117, 2, 0, 0, 120, 112, 64, 94, -35, 47, 26, -97, -66, 119]
反序列化就是将如上数据,转成对象。
但这都是最初的定义,属于 JDK
的方法。但byte[]
数组有很多缺陷,现在常说序列化指对象和json
字符串之间的转化。将对象转成json
字符串是序列化,反之是反序列化。
再来看这个注解,前面提了,它的作用是对属性重命名。
@JsonProperty(value = "qR_Code") private String qRCode;
用上它,这个对象序列化时,json
字符串中这个属性的key
不是qrCode
,而是qr_code
。这个功能在联合第三方平台开发时挺有用。
反之也是一样,反序列化时,用上这个注解,去接收json
字符串中奇奇怪怪的key
。
3、@JsonFormat
json
转换,保证日期时间格式。
@JsonFormat(timezone="GTM+8",pattern="yyyy-MM-dd HH:mm:ss") private Date createDate; @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") public Date getCreateTimeString() { return this.getCreateTime(); }
本文由老郭种树原创,转载请注明:https://guozh.net/jackson-springboot/