您的位置:首页 > Web前端 > JavaScript

fastjson之annotation.JSONField

2017-03-13 15:21 260 查看
@JSONField注释的第一个用处:序列化时定制序列化

定义实体类

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也没有用注解,会跑出异常如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fastjson的使用