自定义序列化
项目和 Jackson 混用, redis 缓存使用 fastjson ; 无法序列化 JsonNode 对象, 使用自定义序列化一则
/**
* @author yangfh
* @date 2023-09-07 10:50
*
**/
public class JsonNodeSerializer implements ObjectSerializer, ObjectDeserializer {
// 序列化 从 JsonNode 到 字符串
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
//fieldType.getTypeName() = com.fasterxml.jackson.databind.JsonNode
String text = object.toString();
serializer.write( text );
}
// 反序列化 从 字符串 到 JsonNode
@Override
public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
String text= (String)parser.parse(fieldName);
return (T) JacksonUtils.readRootNode(text);
}
@Override
public int getFastMatchToken() {
return 0;
}
}
局部使用
public class OrgFarmInfoPersonDTO extends AbstractEntityDTO implements Serializable {
public OrgFarmInfoPersonDTO(){}
/**
* ID
*/
@ApiModelProperty(value="id")
@ObjectFieldDesciption(value = "ID", dataTag = "text")
private String id;
// 使用自定义序列化
@JSONField(serializeUsing = JsonNodeSerializer.class,deserializeUsing = JsonNodeSerializer.class)
private JsonNode photo;
...
全局使用
全局使用, 实现注意判断类型? Type fieldType
// 注册全局
SerializeConfig.getGlobalInstance().put(JsonNode.class, new JsonNodeSerializer());
ParserConfig.getGlobalInstance().putDeserializer(JsonNode.class, new JsonNodeSerializer());