阿里巴巴fastjson @JSONField 註解說明

你笑的像一條狗發表於2018-12-22

阿里巴巴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;
 }
複製程式碼

相關文章