Fastjson @JSONField
精华
小牛编辑
121浏览
2023-03-14
1 @JSONField注解介绍
package com.alibaba.fastjson.annotation;
public @interface JSONField {
// 配置序列化和反序列化的顺序,1.1.42版本之后才支持
int ordinal() default 0;
// 指定字段的名称
String name() default "";
// 指定字段的格式,对日期格式有用
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
}
2 @JSONField使用的位置
可以把@JSONField配置在字段或者getter/setter方法上,例如:
2.1 配置在字段上
public class VO {
@JSONField(name="ID")
private int id;
@JSONField(name="birthday",format="yyyy-MM-dd")
public Date date;
}
2.2 配置在getter/setter方法上
public class VO {
private int id;
@JSONField(name="ID")
public int getId() { return id;}
@JSONField(name="ID")
public void setId(int id) {this.id = id;}
}
注意:若属性是私有的,必须有setter方法。否则无法反序列化。
3 format属性格式化日期
可以使用format属性定制化配置各个日期字段的格式化,如下:
public class A {
// 配置date序列化和反序列使用yyyyMMdd日期格式
@JSONField(format="yyyyMMdd")
public Date date;
}
4 serialize属性指定字段是否序列化
public class A {
@JSONField(serialize=false)
public Date date;
}
public class A {
@JSONField(deserialize=false)
public Date date;
}
5 ordinal属性指定字段顺序
缺省Fastjson序列化一个JavaBean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
public static class VO {
@JSONField(ordinal = 3)
private int f0;
@JSONField(ordinal = 2)
private int f1;
@JSONField(ordinal = 1)
private int f2;
}
6 serializeUsing定制序列化类
在Fastjson 1.2.16版本之后,JSONField支持新的定制化配置serializeUsing,可以单独对某一个类的某个属性定制序列化,比如:
6.1 定制序列化类
Model类:
package cn.xnip.fastjson;
import com.alibaba.fastjson.annotation.JSONField;
/**
* 小牛知识库网 - https://www.xnip.cn
*/
public class Model {
@JSONField(serializeUsing = ModelValueSerializer.class)
public int value;
}
ModelValueSerializer类:
package cn.xnip.fastjson;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;
import java.io.IOException;
import java.lang.reflect.Type;
/**
* 小牛知识库网 - https://www.xnip.cn
*/
public class ModelValueSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
int features) throws IOException {
Integer value = (Integer) object;
String text = value + "元";
serializer.write(text);
}
}
6.2 编写测试类
MainApp:
package cn.xnip.fastjson;
import com.alibaba.fastjson.JSON;
/**
* 小牛知识库网 - https://www.xnip.cn
*/
public class MainApp {
public static void main(String args[]){
Model model = new Model();
model.value = 100;
String json = JSON.toJSONString(model);
System.out.println(json);
}
}
6.3 运行结果
{"value":"100元"}