阿里巴巴fastjson @JSONField 注解说明
1 介绍
1.1 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
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;
}
网友评论