一、什么是SerializerFeature
SerializerFeature是fastjson提供的一个枚举类,主要是用来对JSON序列化时进行属性过滤和格式化的配置。SerializerFeature用来配置JSON序列化。通常情况下,我们在对数据进行序列化的时候,需要针对性的进行一些配置和优化。这个时候,我们就可以用到SerializerFeature了。二、SerializerFeature的一些使用场景
1、日期格式化
在Java开发中,日期类型的格式化一直是个让人比较头疼的问题。而fastjson提供了非常好的解决方案。使用fastjson来进行日期格式化,只需要使用SerializerFeature中的WriteDateUseDateFormat枚举即可。我们可以通过以下代码实现:public class DateDemo { public static void main(String[] args) { Date date = new Date(); String json = JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd", SerializerFeature.WriteDateUseDateFormat); System.out.println(json); } }输出结果如下:
{"date":"2021-03-05"}
可以看到,fastjson默认对日期进行了格式化输出。2、空值过滤
有时候,我们并不希望在JSON数据串中,出现值为null的字段。这个时候,我们可以使用SerializerFeature中的WriteMapNullValue枚举进行空值过滤。我们可以通过以下代码实现:public class NullDemo { public static void main(String[] args) { Map输出结果如下:map = new HashMap<>(); map.put("name", "Tom"); map.put("age", 23); map.put("address", null); String json = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue); System.out.println(json); } }
{"address":null,"name":"Tom","age":23}
可以看到,空值的键值对并没有在JSON串中出现。3、序列化枚举类型
在Java中,我们经常会使用枚举类型,但是在JSON序列化时,对于Enum类型,fastjson默认只输出它的name属性。如果需要输出全部属性,可以使用SerializerFeature.WriteEnumUsingToString枚举。我们可以通过以下代码实现:public class EnumDemo { enum Color { RED(1), GREEN(2), BLUE(3); private int code; Color(int code) { this.code = code; } public int getCode() { return code; } @Override public String toString() { return name() + "[" + code + "]"; } } public static void main(String[] args) { Map输出结果如下:map = new HashMap<>(); map.put("color", Color.RED); String json = JSON.toJSONString(map, SerializerFeature.WriteEnumUsingToString); System.out.println(json); } }
{"color":"RED[1]"}
可以看到,在使用WriteEnumUsingToString枚举之后,序列化的结果是一个完整的枚举属性。三、SerializerFeature的参数及使用方法
下面是SerializerFeature中部分常用的枚举值,以及对应的作用:1、WriteDateUseDateFormat
作用:日期格式化,默认输出为yyyy-MM-dd HH:mm:ss格式,设置该枚举后,可以自定义输出格式。2、WriteNullListAsEmpty
作用:当序列化的List是null时,自动将List序列化输出为空数组格式[]。3、WriteNullStringAsEmpty
作用:当序列化的字符串是null时,自动将其序列化输出为空字符串。4、WriteMapNullValue
作用:当序列化的Map中键值对中值为null时,自动过滤掉不输出,比如 “name”:null 将不会输出。5、WriteEnumUsingToString
作用:当序列化枚举对象时,自动输出该枚举对象的toString方法的返回值,而不是默认输出枚举对象的名称。 具体使用方法,在序列化时,可以在toJSONString方法中传入枚举参数,也可以设置一个全局参数,即应用于所有序列化对象。示例代码如下:JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat); JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteDateUseDateFormat.getMask();