天天看點

巧用fastjson自定義序列化類實作字段的轉換

項目中突然需要增加另一個字段的查找,而這個查找需要查另一張表的記錄。

但現在産品很多地方都要增加該字段,如何最快的實作該功能呢。

辦法如下:

通過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增加該注解即可.