fastjson之annotation.JSONField
@JSONField注释的第一个用处:序列化时定制序列化
fastjson是一个json库
一个JSON库的最基本功能就是序列化和反序列化
Fastjson支持Java bean的直接序列化。使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。
用法1JSON.toJSONString
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
定义实体类
import com.alibaba.fastjson.annotation.JSONField;
public class DestinationPoint{
private String name;// 名称
private Float altitude;// 纬度
/**点1:序列化时该字段序列化后key值为smx*/
@JSONField(name = "smx")
private Float longitude;// 经度
/**点2:该字段不允许被序列化*/
@JSONField(serialize = false)
private Float latitude;// 海拔
//添加getter,setter方法,必须有get方法才能被序列化
}
import com.alibaba.fastjson.JSONObject;
public static void main(String[] args) {
// 第一步:新建一个Destination对象
DestinationPoint destination = new DestinationPoint();
destination.setName("sss");
destination.setAltitude((float) 11);
destination.setLatitude((float) 11);
destination.setLongitude((float) 99);
/** 第二步:默认序列化和反序列化 */
// 序列化:对象的所有非空字段转为json字符串
String desJson = JSONObject.toJSONString(destination);
System.out.println(desJson);
}
测试结果
字段latitude没能序列化
字段longitude序列化后,key值变成了“smx”
@JSONField注释的第二个用处:类关联时,主类和从类中必须有一个添加该注释,要不然会循环引用,造成栈溢出
定义类DestinationPoint
public class DestinationPoint {
@Column(name = "name", length = 50)
private String name;// 名称
@JSONField(serialize = false)
@OneToMany(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, mappedBy = "destination", fetch = FetchType.LAZY)
private Set<CollectLine> collectlines = new HashSet<CollectLine>();// 目的地对线路,是一对多
定义类CollectLine
public class CollectLine extends BaseEntity<Long> {
@Column(name = "name", length = 100)
private String name;// 名称
@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER)
@JoinColumn(name = "destination_point_id")
private DestinationPoint destination;// 目的地点
如果DestinationPoint类中定义字段collectlines 没有用注解,类CollectLine类中定义字段destination也没有用注解,会跑出异常如下: