程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(3)

FastJson序列化时过滤字段

发布于2021-06-14 10:06     阅读(486)     评论(0)     点赞(11)     收藏(3)


  FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法。

方法一、FastJson的注解

  1. 1 @JSONField(serialize = false)
  2. 2 private String name;

  最便捷,直接在实体的字段上加FastJson的注解serialize = false,转JSON字符串时就不会有该字段。

方法二、JAVA关键字

  1. 1 @JSONField(name = "AGE")
  2. 2 private transient String age;

  在实体字段前面,使用transient关键字,表示该字段不参与序列化,转JSON字符串时就可以忽略掉该字段。因为是JAVA关键字所以也会影响该字段其他序列化操作。

方法三、FastJson的属性名过滤器

  1. 1 SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
  2. 2 filter.getExcludes().add("PHONE");
  3. 3 System.out.println(JSONObject.toJSONString(u, filter));

  通过SimplePropertyPreFilter过滤器,来过滤指定的属性名,然后在转JSON的时候,带上过滤器参数即可。

  如果需要保留的参数比较少,也可以反过来,使用filter.getIncludes().add("PHONE");的方式来包含指定的字段。还可以直接在new的时候带上,这里是可变参数,所以可以同时指定多个,即如下这种写法:

1     SimplePropertyPreFilter filter = new SimplePropertyPreFilter("PHONE", "SEX");

注:这里的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。

方法四、FastJson的属性过滤器

  1. 1 PropertyFilter profilter = new PropertyFilter() {
  2. 2 @Override
  3. 3 public boolean apply(Object object, String name, Object value) {
  4. 4 if (name.equals("SEX")) {
  5. 5 // false表示字段将被排除在外
  6. 6 return false;
  7. 7 }
  8. 8 return true;
  9. 9 }
  10. 10 };
  11. 11 System.out.println(JSON.toJSONString(u, profilter));

  通过实现PropertyFilter接口的apply方法,来实现过滤属性,方法参数name即为字段的key,参数value即为字段的value,这种方式最强大,因为可以自定义具体过滤规则。方法返回false即为排除该字段。在转JSON的时候,带上过滤器参数即可。注:参数name指的字段名为转成JSON后的key,不是实体的属性名。如例子中为大写SEX,而不是小写的sex。

  如果是JAVA8的话。可以使用lambda表达式,更简洁,如下:

  1. 1 PropertyFilter profilter = (object, name, value) -> {
  2. 2 if (name.equals("SEX")) {
  3. 3 // false表示字段将被排除在外
  4. 4 return false;
  5. 5 }
  6. 6 return true;
  7. 7 };

附上实体类做参考:

  1. 1 public class User {
  2. 2
  3. 3 @JSONField(name = "ID")
  4. 4 private String id;
  5. 5
  6. 6 @JSONField(serialize = false)
  7. 7 private String name;
  8. 8
  9. 9 @JSONField(name = "AGE")
  10. 10 private transient String age;
  11. 11
  12. 12 @JSONField(name = "SEX")
  13. 13 private String sex;
  14. 14
  15. 15 @JSONField(name = "PHONE")
  16. 16 private String phone;
  17. 17 }


所属网站分类: 技术文章 > 博客

作者:长这么胖

链接:http://www.javaheidong.com/blog/article/222723/c6c7c261334f727cd3d8/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

11 0
收藏该文
已收藏

评论内容:(最多支持255个字符)