java jackson 排除属性_java 序列化时排除指定属性

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

范例:

privateString getMessageJson(PushMessage message) {

List excludeProperties = new ArrayList();

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

returnpushJsonStr;

}

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

(2)使用Jackson

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

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

Xml代码

org.codehaus.jackson

jackson-mapper-lgpl

1.9.9

如何排除指定属性呢?

方式一:

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

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

Java代码

public voidtest_jackson(){//Map map=new HashMap();//map.put("name", "黄威");

List stus=null;

stus=new ArrayList();

Student2 stu=newStudent2();

stus.add(stu);

stu.setAddress(null);

ObjectMapper mapper= newObjectMapper();

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代码

@Testpublic voidtest_jackson2(){

List stus=null;

stus=new ArrayList();

Student2 stu=newStudent2();

stus.add(stu);

stu.setClassroom("36班");

ObjectMapper mapper= newObjectMapper();

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")

4a36efbe3e42236a8a8ff648d0a9667b.png

参考: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学习笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值