FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法。
方法一、FastJson的注解
@JSONField(serialize = false) private String name;
最便捷,直接在实体的字段上加FastJson的注解serialize = false,转JSON字符串时就不会有该字段。
方法二、JAVA关键字
@JSONField(name = "AGE")private transient String age;
在实体字段前面,使用transient关键字,表示该字段不参与序列化,转JSON字符串时就可以忽略掉该字段。因为是JAVA关键字所以也会影响该字段其他序列化操作。
方法三、FastJson的属性名过滤器
SimplePropertyPreFilter filter = new SimplePropertyPreFilter();filter.getExcludes().add("PHONE");System.out.println(JSONObject.toJSONString(u, filter));
通过SimplePropertyPreFilter过滤器,来过滤指定的属性名,然后在转JSON的时候,带上过滤器参数即可。
如果需要保留的参数比较少,也可以反过来,使用filter.getIncludes().add("PHONE");的方式来包含指定的字段。还可以直接在new的时候带上,这里是可变参数,所以可以同时指定多个,即如下这种写法:
SimplePropertyPreFilter filter = new SimplePropertyPreFilter("PHONE", "SEX");
注:这里的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。
方法四、FastJson的属性过滤器
PropertyFilter profilter = new PropertyFilter() { @Override public boolean apply(Object object, String name, Object value) { if (name.equals("SEX")) { // false表示字段将被排除在外 return false; } } System.out.println(JSON.toJSONString(u, profilter));
通过实现PropertyFilter接口的apply方法,来实现过滤属性,方法参数name即为字段的key,参数value即为字段的value,这种方式最强大,因为可以自定义具体过滤规则。方法返回false即为排除该字段。在转JSON的时候,带上过滤器参数即可。注:参数name指的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。
如果是JAVA8的话。可以使用lambda表达式,更简洁,如下:
PropertyFilter profilter = (object, name, value) -> { if (name.equals("SEX")) { // false表示字段将被排除在外 return false; } return true; };
附上实体类做参考:
public class User { @JSONField(name = "ID") private String id; @JSONField(serialize = false) private String name; @JSONField(name = "AGE") private transient String age; @JSONField(name = "SEX") private String sex; @JSONField(name = "PHONE") private String phone; }
来源地址:https://blog.csdn.net/LiZhen314/article/details/129811202