对象某⼀字段做处理--fastjson的值过滤器ValueFilter
⽇常⼯作中,有时候打印⽇志或其他事情需要对对象的某⼀属性做处理,这时候推荐使⽤-fastjson的值过滤器ValueFilter。
ValueFilter对序列化出来的值做统⼀处理,步骤如下:
实现com.alibaba.fastjson.serializer.ValueFilter接⼝,实现其Object process(Object object, String name, Object value)⽅法,根据需要修改返回的值。
调⽤fastjson序列化对象时,使⽤此filter
⼀、实现ValueFilter接⼝:
import com.alibaba.fastjson.serializer.ValueFilter;
public class FieldJsonFilter implements ValueFilter {
/**
* phone的字符串
*/
public static final String FIELD ="phone";
/**
* fastjson中序列化电话号码时,进⾏加密处理啊
* @param object 序列化对象object to
* @param name 对象中key
* @param value 对象中的值
* @return Object
*/
@Override
public Object process(Object object, String name, Object value){
if(FIELD.equals(name)){
return"****";
}
return value;
}
}
import com.alibaba.fastjson.serializer.ValueFilter;
llect.Lists;
import java.util.List;
public class FieldsJsonFilter implements ValueFilter {
public static final List<String> FIELDS = wArrayList("phone","mobile");
public FieldsJsonFilter(){
}
@Override
public Object process(Object object, String name, Object value){
ains(name)?"****": value;
}
}
⼆、使⽤
在序列化时使⽤值过滤器:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/
**
* @author yandou
*/
public class JsonUtil {
public static void main(String[] args){
InfoDTO dto =new InfoDTO();
dto.setName("测试");
dto.setPhone("185********");
dto.setMobile("185********");
//直接对对象指定字段处理
System.out.println(toJSONStringWithField(dto));
String str2 = JSONString(dto);
System.out.println(str2);
//对json字符串需要先专程对象,再处理
System.out.println(toJSONStringWithFields(JSON.parse(str2))); }
public static String toJSONStringWithField(Object value){
JSONString(value,new FieldJsonFilter()); }
public static String toJSONStringWithFields(Object value){
JSONString(value,new FieldsJsonFilter()); }
}
运⾏结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论