java jackson 排除属性_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

范例:

Java代码

private String 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

return pushJsonStr;

}

注意: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 void test_jackson(){

//      Map map=new HashMap();

//      map.put("name", "黄威");

List stus=null;

stus=new ArrayList();

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 stus=null;

stus=new ArrayList();

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值