简单说com.alibaba.fastjson的SerializerFeature+⾃定义序列化
简单说 Fastjson 定制序列化 + ⾃定义序列化
⼀、前⾔——问题
当使⽤ com.alibaba.JSONString(Object) 将JavaBean实体转换为json的时候,怎么忽略掉某些属性不参与序列化等。
常见场景:
a. 值为空或值为空字符串的属性不参加序列化
b. 某实体在转json时不参加序列化
c. ⽇期格式化
d. 实体内⾮属性字段,但是以is开头的⽅法(isXXX/is_XXX),别的⽅法未发现,此问题可看下图:
⼆、控制台输出格式化json
⾸先我们先将我们输出的json格式化,待会⼉看着⽅便
格式化json:⽤ SerializerFeature.PrettyFormat
JSONString(petShop,SerializerFeature.PrettyFormat);
可以看到JSONObject将实体转json时:
(1)实体转json时,值为null的属性默认已排除;
(2)值为空字符串的属性没有排除;
(3)实体⾥is开头的⽅法(isXXX/is_XXX)会被当作属性转换到json⾥
fastjson忽略属性三、解决问题:
1.@JSONField(serialize = false)
实体的属性或⽅式上加注解@JSONField(serialize = false)排除 isXXX/is_XXX ⽅法或某个指定属性注意:别⽤错了 @JsonIgnore也⾏,但是不是alibaba包下的,所以⽤了也不⽣效
2. @JSONField(format = “”)处理⽇期
单个属性的⽇期格式化
@JSONField(format ="yyyy-MM-dd")
@JSONField(format ="yyyy-MM-dd HH:mm:ss")
同样的,这个格式化的时候,也注意别⽤错了,也可以⽤下⾯的,但是不alibaba包下的,⼀样不⽣效@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
没有格式化的:
格式化后的:
3. 全局控制:SerializerFeature
(1)全局⽇期格式化
SerializerFeature.WriteDateUseDateFormat
(2)SerializerFeature.IgnoreNonFieldGetter
我们刚加的单个注解都去掉,然后⽤SerializerFeature测试。
忽略isXXX/is_XXX ⽅法或者更多其他
直接⽤:SerializerFeature.IgnoreNonFieldGetter
(3)为null的属性默认⾃动排除
在fastjson中,缺省是不输出空值的。⽆论Map中的null和对象属性中的null,序列化的时候都会被忽略不输出,这样会减少产⽣⽂本的⼤⼩。
但是有时候接⼝联调需要,⾮要输出的话,⽤:SerializerFeature.WriteMapNullValue
(4)空字符串不序列化
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论