1. 程式人生 > >java 序列化時排除指定屬性

java 序列化時排除指定屬性

live es2017 plugin cep ktr org ted pil too

ava 序列化對象如何排除指定屬性呢?

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

範例:

private String getMessageJson(PushMessage message) {  
        List<Pattern> excludeProperties = new ArrayList<Pattern>();  
        Pattern pattern1 
= Pattern.compile("description"); Pattern pattern2 = Pattern.compile("creator");// 創建者ID Pattern pattern3 = Pattern.compile("modifier");// 修改者ID Pattern pattern4 = Pattern.compile("deliverTime");// Pattern pattern5 = Pattern.compile("description");// Pattern pattern6 = Pattern.compile("createTime");//
Pattern pattern7 = Pattern.compile("modifyTime");// excludeProperties.add(pattern1); excludeProperties.add(pattern2); excludeProperties.add(pattern3); excludeProperties.add(pattern4); excludeProperties.add(pattern5); excludeProperties.add(pattern6); excludeProperties.add(pattern7); String pushJsonStr
= null; try { PushMessage pushMessage = null; try { pushMessage = message.clone(); } catch (CloneNotSupportedException e) { logger.error("pushmessage clone failed.", e); } pushJsonStr = JSONUtil.serialize(pushMessage, excludeProperties, null, false, false); logger.info("after struts serialize:" + pushJsonStr); } catch (JSONException e) { logger.error("struts serialize failed.", e); }// TOOD 判斷json字符串的長度是否超過了256 return pushJsonStr; }

註意: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代碼
public void test_jackson(){  
//      Map map=new HashMap();  
//      map.put("name", "黃威");  
        List<Student2> stus=null;  
        stus=new ArrayList<Student2>();  
        Student2 stu=new Student2();  
        stus.add(stu);  
        stu.setAddress(null);  
        ObjectMapper mapper = new ObjectMapper();  
        mapper.setSerializationInclusion(Inclusion.NON_NULL);  
        String content = null;  
        try {  
            content = mapper.writeValueAsString(stus);  
            System.out.println(content);  
        } catch (JsonGenerationException e) {  
            e.printStackTrace();  
        } catch (JsonMappingException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
          
    }  

我把Student2對象的屬性address設置為null,那麽序列化時就會排除address屬性.

註意:mapper.setSerializationInclusion(Inclusion.NON_NULL); 表示排除值為null的屬性(成員變量)

方式二:使用FilterProvider

Java代碼
@Test  
    public void test_jackson2(){  
        List<Student2> stus=null;  
        stus=new ArrayList<Student2>();  
        Student2 stu=new Student2();  
        stus.add(stu);  
        stu.setClassroom("36班");  
        ObjectMapper mapper = new ObjectMapper();  
        String content = null;  
        try {  
//          content = mapper.writeValueAsString(stus);  
            SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter.serializeAllExcept("schoolNumber");  
            FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter);  
           
            content = mapper.writer(filters).writeValueAsString(stu);  
            System.out.println(content);  
        } catch (JsonGenerationException e) {  
            e.printStackTrace();  
        } catch (JsonMappingException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
          
    }  

註意:在排除屬性的對象上面增加註解:@JsonFilter("myFilter")
技術分享

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

http://stackoverflow.com/questions/11757487/how-to-tell-jackson-to-ignore-a-field-during-serialization-if-its-value-is-null

http://www.cnblogs.com/yangy608/p/3936848.html

附件是json學習筆記

java 序列化時排除指定屬性