ect object, Object fieldName, Type fieldType, int features) throws IOException {
serializer.write( StringUtils.abbreviate(JSON.toJSONString(object),100));
}
}
View Code
然后,使用com.alibaba.fastjson.annotation.JSONField 注解。
@JSONField(serializeUsing = StringAbbreviatingSerializer.class)
private T data;
完了吗?我要补充——一并重写Result<T>的toString方法。彻底一劳永逸。
@Data
public class Result<T> implements Serializable {
。。。。
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
这么改,对别的地方有影响吗?
要说明的是,加上这个注解后,对与http请求的响应值Result<T> 和 dubbo的响应值Result<T> 是不会有任何影响的。为什么?因为这两者的序列化不是fastjson,SpringMVC默认使用Jackson作为序列化工具;dubbo RPC默认启用的序列化方式是hessian2(实际不是原生的hessian2序列化,而是阿里修改过的hessian lite)。以上已亲测。
所以,放心用,放心使用fastjson JSON#toJSONString(Result<T>) 去记录日志。妈妈再也不用担心我的日志爆屏了。
over!
附:
在项目开发中经常会遇到一些业务需要对某些数据进行特殊的定制化处理,fastjson为我们提供了接口可以用于实现自定义的编解码器来完成我们的业务要求。
ObjectSerializer和ObjectDeserializer分别是fastjson的编码器和解码器接口。