java 序列化时排除指定属性

news/2024/7/3 7:33:59

java 序列化对象如何排除指定属性呢?

java 中序列化对象有多种方式:struts2 ,jackson,json-lib

(1)使用struts2 json插件

依赖的jar包:struts2-json-plugin-2.3.15.3.jar,xwork-core-2.3.15.3.jar,当然还有servlet-api.jar

范例:

Java代码  
  1. private String getMessageJson(PushMessage message) {  
  2.         List<Pattern> excludeProperties = new ArrayList<Pattern>();  
  3.         Pattern pattern1 = Pattern.compile("description");  
  4.         Pattern pattern2 = Pattern.compile("creator");// 创建者ID  
  5.         Pattern pattern3 = Pattern.compile("modifier");// 修改者ID  
  6.         Pattern pattern4 = Pattern.compile("deliverTime");//   
  7.         Pattern pattern5 = Pattern.compile("description");//   
  8.         Pattern pattern6 = Pattern.compile("createTime");//   
  9.         Pattern pattern7 = Pattern.compile("modifyTime");//   
  10.           
  11.         excludeProperties.add(pattern1);  
  12.         excludeProperties.add(pattern2);  
  13.         excludeProperties.add(pattern3);  
  14.         excludeProperties.add(pattern4);  
  15.         excludeProperties.add(pattern5);  
  16.         excludeProperties.add(pattern6);  
  17.         excludeProperties.add(pattern7);  
  18.           
  19.         String pushJsonStr = null;  
  20.         try {  
  21.             PushMessage pushMessage = null;  
  22.             try {  
  23.                   
  24.                 pushMessage = message.clone();  
  25.             } catch (CloneNotSupportedException e) {  
  26.                 logger.error("pushmessage clone failed.", e);  
  27.             }  
  28.             pushJsonStr = JSONUtil.serialize(pushMessage, excludeProperties,  
  29.                     null, false, false);  
  30.             logger.info("after struts serialize:" + pushJsonStr);  
  31.         } catch (JSONException e) {  
  32.             logger.error("struts serialize failed.", e);  
  33.         }// TOOD 判断json字符串的长度是否超过了256  
  34.         return pushJsonStr;  
  35.     }  

 注意:Pattern.compile 的参数就是要排除的成员变量名称(即description,creator,modifier都是成员变量名称)

 

 

(2)使用Jackson

官网:http://jackson.codehaus.org/

参考:http://blog.csdn.net/sciurid/article/details/8624107

 

http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html

依赖的jar:jackson-mapper-lgpl-1.9.9.jar,jackson-core-lgpl-1.9.9.jar

如果使用maven,则在pom.xml中添加依赖

 

Xml代码  
  1. <!-- Json转化模块 -->  
  2.         <dependency>  
  3.             <groupId>org.codehaus.jackson</groupId>  
  4.             <artifactId>jackson-mapper-lgpl</artifactId>  
  5.             <version>1.9.9</version>  
  6.         </dependency>  

 如何排除指定属性呢?

 

方式一:

先把要准备排除的属性的值设置为null

然后设置mapper的包含策略,看下面的实例:

 

Java代码  
  1. public void test_jackson(){  
  2. //      Map map=new HashMap();  
  3. //      map.put("name", "黄威");  
  4.         List<Student2> stus=null;  
  5.         stus=new ArrayList<Student2>();  
  6.         Student2 stu=new Student2();  
  7.         stus.add(stu);  
  8.         stu.setAddress(null);  
  9.         ObjectMapper mapper = new ObjectMapper();  
  10.         mapper.setSerializationInclusion(Inclusion.NON_NULL);  
  11.         String content = null;  
  12.         try {  
  13.             content = mapper.writeValueAsString(stus);  
  14.             System.out.println(content);  
  15.         } catch (JsonGenerationException e) {  
  16.             e.printStackTrace();  
  17.         } catch (JsonMappingException e) {  
  18.             e.printStackTrace();  
  19.         } catch (IOException e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.           
  23.     }  

 我把Student2对象的属性address设置为null,那么序列化时就会排除address属性.

 

注意:mapper.setSerializationInclusion(Inclusion.NON_NULL); 表示排除值为null的属性(成员变量)

方式二:使用FilterProvider

 

Java代码  
  1. @Test  
  2.     public void test_jackson2(){  
  3.         List<Student2> stus=null;  
  4.         stus=new ArrayList<Student2>();  
  5.         Student2 stu=new Student2();  
  6.         stus.add(stu);  
  7.         stu.setClassroom("36班");  
  8.         ObjectMapper mapper = new ObjectMapper();  
  9.         String content = null;  
  10.         try {  
  11. //          content = mapper.writeValueAsString(stus);  
  12.             SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter.serializeAllExcept("schoolNumber");  
  13.             FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter);  
  14.            
  15.             content = mapper.writer(filters).writeValueAsString(stu);  
  16.             System.out.println(content);  
  17.         } catch (JsonGenerationException e) {  
  18.             e.printStackTrace();  
  19.         } catch (JsonMappingException e) {  
  20.             e.printStackTrace();  
  21.         } catch (IOException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.           
  25.     }  

 注意:在排除属性的对象上面增加注解:@JsonFilter("myFilter")

参考:http://www.baeldung.com/jackson-ignore-properties-on-serialization

转载于:https://www.cnblogs.com/maohuidong/p/8066620.html


http://www.niftyadmin.cn/n/2675415.html

相关文章

ASP.NET的视图(Razor)循环产生html代码

需要要视图中Razor语法&#xff0c;循环产生一些html代码。产生后的html是这样的&#xff1a; <li data-transition"fade" data-slotamount"7" data-masterspeed"1500"><img src"~/Content/img/slider-images/XXX1111.jpg" a…

【AtCoder】【AGC009D】Uninity

Description 给出一棵树&#xff0c;要求确认一种点分治策略&#xff0c;使得点分树的深度最小。 Solution 显然&#xff0c;答案的上界为log&#xff08;然并卵&#xff09;。 我们先定义点权&#xff0c;一个点的点权为它在点分树上的深度&#xff0c; 显然&#xff0c;…

西游记人物

package com.hanqi;public class Xiyouji2 {String Name;double Height;String Weapon;void printName(){System.out.println(Name);}void printWeapon(){System.out.println("武器&#xff1a; "Weapon);}public static void main(String[] args){Xiyouji2 XiYouJiR…

Microsoft更新Cosmos DB,提供Cassandra支持,提高可用性保证

在上个月的Connect 2017大会上&#xff0c;Microsoft新发布了多个Azure Cosmos DB更新&#xff0c;其中包括支持使用Cassandra NoSQL数据库的API&#xff0c;以及更高的可用性保证。这样&#xff0c;用户可以在Cosmos DB内使用针对Cassandra NoSQL数据库的API去操作数据模型。此…

【AtCoder】【ARC064F】Rotated Palindromes

Description 求有多少个序列满足以下条件&#xff1a; 1. 序列有n位&#xff1b; 2. 序列的每位为1~m之间的整数&#xff1b; 3. 这个序列经过旋转以后可以变成一个回文串&#xff1b; Solution 这是一个悲惨的故事…..想了一天多&#xff0c;一直在想怎么减掉不合法的&…

网站常见的反爬虫和应对方法

这几天在爬一个网站&#xff0c;网站做了很多反爬虫工作&#xff0c;爬起来有些艰难&#xff0c;花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下。 从功能上来讲&#xff0c;爬虫一般分为数据采集&#xff0c;处理&#xff0c;储存三…

Android系统层Watchdog机制源码分析

一&#xff1a;为什么需要看门狗? Watchdog,初次见到这个词语是在大学的单片机书上, 谈到了看门狗定时器. 在很早以前那个单片机刚发展的时候, 单片机容易受到外界工作影响, 导致自己的程序跑飞, 因此有了看门狗的保护机制, 即:需要每多少时间内都去喂狗, 如果不喂狗, 看门狗将…

【AtCoder】【ARC072F】Dam

Description 有一坐体积为m的水库&#xff0c;每天早上会有水流进来&#xff0c;晚上会放水&#xff0c; 每天流进来的水的温度和体积都可能不同&#xff0c;俩温度不同的水混合后的温度为&#xff1a;t1∗v1t2∗v2v1v2t1∗v1t2∗v2v1v2&#xff0c; 假设水的温度不受其他因…