巧用fastjson自定义序列化类实现字段的转换
2018-05-14 本文已影响0人
爱余星痕
项目中突然需要增加另一个字段的查找,而这个查找需要查另一张表的记录。
但现在产品很多地方都要增加该字段,如何最快的实现该功能呢。
办法如下:
通过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增加该注解即可.