java序列化时排除指定属性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
范例:
private String getMessageJson(PushMessage message) {
List<Pattern> excludeProperties = new ArrayList<Pattern>();
Pattern pattern1 = Patternpile("description");
Pattern pattern2 = Patternpile("creator");// 创建者ID
Pattern pattern3 = Patternpile("modifier");// 修改者ID
Pattern pattern4 = Patternpile("deliverTime");//
Pattern pattern5 = Patternpile("description");//
Pattern pattern6 = Patternpile("createTime");//
Pattern pattern7 = Patternpile("modifyTime");//
excludeProperties.add(pattern1);
excludeProperties.add(pattern2);
excludeProperties.add(pattern3);
excludeProperties.add(pattern4);
pattern属性excludeProperties.add(pattern5);
excludeProperties.add(pattern6);
excludeProperties.add(pattern7);
String pushJsonStr = null;
try {
PushMessage pushMessage = null;
try {
pushMessage = message.clone();
} catch (CloneNotSupportedException e) {
<("pushmessage clone failed.", e);
}
pushJsonStr = JSONUtil.serialize(pushMessage, excludeProperties,
null, false, false);
logger.info("after struts serialize:" + pushJsonStr);
} catch (JSONException e) {
<("struts serialize failed.", e);
}// TOOD 判断json字符串的长度是否超过了256
return pushJsonStr;
}
注意:Patternpile 的参数就是要排除的成员变量名称(即description,creator,modifier都是成员变量名称) (2)使⽤Jackson
依赖的jar:jackson-mapper-lgpl-1.9.9.jar,jackson-core-lgpl-1.9.9.jar
如果使⽤maven,则在l中添加依赖
<!-- Json转化模块 -->
<dependency>
<groupId&dehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.9.9</version>
</dependency>
如何排除指定属性呢?
⽅式⼀:
先把要准备排除的属性的值设置为null
然后设置mapper的包含策略,看下⾯的实例:
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
@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();
}
}
附件是json学习笔记
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论