fastjson之annotation.JSONField

@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 collectlines = new HashSet();// 目的地对线路,是一对多

定义类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之annotation.JSONField_第1张图片

你可能感兴趣的:(JSON)