巧用fastjson自定義序列化類實現欄位的轉換

愛餘星痕發表於2018-05-14

專案中突然需要增加另一個欄位的查詢,而這個查詢需要查另一張表的記錄。
但現在產品很多地方都要增加該欄位,如何最快的實現該功能呢。
辦法如下:
通過fastjson序列化時,增加該欄位的序列化類,該序列化類通過CODE查詢名稱,並序列化到前端。

  • VO的功能修改
@Data
public class SysDictItemSelectVo implements Serializable{

    private static final long serialVersionUID = 1L;
    @JSONField(serializeUsing=ToSystemNameSerializer.class)
    private String systemName;

    public String getSystemName(){
        return this.getCode();
    }
    }
  • 序列化的類的屬性

import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;
import com.alibaba.fastjson.serializer.SerializeWriter;

import java.io.IOException;
import java.lang.reflect.Type;

public    class ToSystemNameSerializer implements ObjectSerializer {

    public static final  ToSystemNameSerializer instance = new  ToSystemNameSerializer();

    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
                      int features) throws IOException {
        SerializeWriter out = serializer.out;

        if (object == null) {
            out.writeNull();
            return;
        }

        //原來的值code
        String strVal = object.toString();
        System.out.println(strVal);
        //通過code查詢相關名稱,測試先寫死值 
        String name="std";
        out.writeString(name);

    }
}

經測試,序列化正常,其他地方只需要在VO增加該註解即可.


相關文章