fastjson使用@JSONField、@JSONType、SerializeFilter定制序列化
使用fastjson进行序列化,就是把JavaBean转换为JSON格式的数据。而且fastjson的序列化高度可控性,可以自己定制序列化。fastjson的定制序列化有很多中实现方式,主要有如下的方式:
1、在实体类上的字段使用@JSONField定制序列化: //配置序列化的时候,不序列化id @JSONField(serialize=false) private int id; private String name;// 姓名 private int age; //年龄 // 配置序列化的名称 @JSONField(name="gender") public String sex; 2、在类上通过@JSONType定制序列化: //配置序列化的时候,不序列化id sex @JSONType(ignores ={"id","sex"}) public class Uoimplements Serializable {} // 配置序列化的时候,序列化name 和sex @JSONType(includes={"name","sex"}) public class Uo1implements Serializable {} 注:注意和@JSONField不同的是,@JSONType是配置在类上的,而@JSONField是配置在字段和方法上的。 3、使用SerializeFilter定制序列化: 通过SerializeFilter可以使用扩展编程的方式实现定制序列化。fastjson提供了多种SerializeFilter:
以上的SerializeFilter在JSON.toJSONString中可以使用。 1)PropertyPreFilter: 定制序列化,只序列化一部分字段,将需要序列化的字段名,配置到数组中。如果什么都不配置,则序列化全部字段 。 User user = newUser(); user.setId(1); user.setName("lanjingling"); user.setSex(4); //定制序列化,配置到数组中 如果什么都不配置,则序列化全部字段 SimplePropertyPreFilterfilter = new SimplePropertyPreFilter(User.class,newString[]{"name"}); String jsonString =JSON.toJSONString(user,filter ); System.out.println(jsonString); 2)PropertyFilter 根据key和value判断是否需要序列化: PropertyFilterfilter2 = new PropertyFilter() { @Override publicboolean apply(Object object,String key,Object value) { if(key.equals("sex")) { if((Integer)value >1) { returntrue; } }else if (key.equals("name")) { returntrue; } returnfalse; } }; String jsonString =JSON.toJSONString(user,filter2 ); System.out.println(jsonString); 3)NameFilter : //如果需要修改Key,process返回值则可 返回需要修改后的key值,如果不修改,则返回name 切记不能返回null,否则会报错 NameFilternameFilter = new NameFilter() { @Override publicString process(Object object,String name,Object value) { if(name.equals("id")){ return"ID"; } returnname; } }; 4)ValueFilter 序列化时修改value: ValueFiltervalueFilter = new ValueFilter() { @Override publicObject process(Object object,Object value) { if(name.equals("name")){ return"张三"; } return""; } }; 5)BeforeFilter 序列化时在最前添加内容 : BeforeFilterbeforeFilter = new BeforeFilter() { @Override publicvoid writeBefore(Object object) { writeKeyValue("start","bofore"); } }; 6)AfterFilter 序列化之时在最后添加内容 : AfterFilterafterFilter = new AfterFilter() { @Override publicvoid writeAfter(Object object) { writeKeyValue("end","after"); } }; String jsonString =JSON.toJSONString(user,afterFilter); System.out.println(jsonString); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |