阿里巴巴fastjson @JSONField 注解说明
1 介绍
1.1 依赖
com.alibaba fastjson 1.2.47
1.2 @jsonField注解
@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})public @interface JSONField { int ordinal() default 0; String name() default ""; String format() default ""; boolean serialize() default true; boolean deserialize() default true; //其他省略}复制代码
1.3 @jsonField注解常用属性
name : 给字段起别名
ordinal :用来排序 输出json字符串中key属性的先后顺序 可以用 @JSONType (orders={})来代替
format : 用来日期格式化
serialize :指定字段不序列化
deserialize :指定字段不序列化
2 示例
2.1 User类
public class User {String a;String b;String c;String d;String z;//get set 省略}复制代码
2.2 json字符串中字段先后顺序排序
我们来输出一下
User user =new User();user.setA("a");user.setB("b");user.setC("c");user.setD("d");user.setZ("e");System.out.println(JSON.toJSONString(user));复制代码
结果:
{ "a":"a","b":"b","c":"c","d":"d","z":"e"}复制代码
我们现在想要这样子的格式:z,a,b,c,d,e
此时采用注解
public class User {@JSONField(ordinal = 1)String a;@JSONField(ordinal = 2)String b;@JSONField(ordinal = 3)String c;@JSONField(ordinal = 4)String d;@JSONField(ordinal = 0) // 默认是0 可以不加String z;//get set 省略}复制代码
输出
{ "z":"e","a":"a","b":"b","c":"c","d":"d"}复制代码
或者我们可以采用另一个注解 注解在类上面 @JSONType(orders = {"z","a","b","c","d"})
@JSONType(orders = { "z","a","b","c","d"})public class User {//省略}复制代码
2.3 format 和 name 一起使用
新增字段 Date 字段 ,然后 格式化,顺便给字段 z 起别名 z_name
@JSONField(ordinal = 2) String a; @JSONField(ordinal = 3) String b; @JSONField(ordinal = 4) String c; @JSONField(ordinal = 5) String d; @JSONField(ordinal = 1 , name = "z_name") String z; @JSONField(ordinal = 0 ,format = "yyyy-MM-dd") Date z_date = new Date(); //get set 省略复制代码
输出
{ "z_date":"2018-12-20","z_name":"e","a":"a","b":"b","c":"c","d":"d"}复制代码
serialize
public class A { @JSONField(serialize=false) public Date date; }复制代码