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 = 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中添加依赖
- <!-- Json转化模块 -->
- <dependency>
- <groupId>org.codehaus.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();
- }
- }
注意:在排除属性的对象上面增加注解:@JsonFilter("myFilter")
参考:http://www.baeldung.com/jackson-ignore-properties-on-serialization
java 序列化时排除指定属性的更多相关文章
- 7z压缩文件时排除指定的文件
分享一个7z压缩文件时排除指定文件类型的命令行,感觉很有用: 7z a -t7z d:\updateCRM.7z d:\updateCRM\*.* -r -x!*.log -x!*bak a:创建压缩 ...
- ZIP、tar.gz压缩时排除指定目录
1.ZIP 压缩时排除一个文件夹下所有内容zip -r sss.zip sss/ -x "sss/222/*" 压缩时排除指定多个文件夹下所有内容zip -r sss.zip ss ...
- Sublime Text 查找时排除指定的文件夹或文件
Sublime Text 查找时排除指定的文件夹或文件 Ctrl + Shift + F这组快捷键可以调出 Sublime Text 的查找替换窗口,里边有一栏 Where,可以做一些高级设置:d:\ ...
- FastJson序列化时过滤字段(属性)的方法总结
FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法. 方法一.FastJson的注解 @JSONField(serialize ...
- Java序列化由于没有指定serialVersionUID导致报错
z.JobPersistenceException: Couldn't retrieve job because the BLOB couldn't be deserialized: com.mode ...
- GSON使用笔记(1) -- 序列化时排除字段的几种方式
http://blog.csdn.net/zxhoo/article/details/21471005 GSON是Google发布的JSON序列化/反序列化工具,非常容易使用.本文简要讨论在使用GSO ...
- grep时排除指定的文件和目录
参考:http://winterth.duapp.com/notes/ar03s04.htmlhttp://blog.sina.com.cn/s/blog_7169c8ce0100qkyf.html ...
- Java四舍五入时保留指定小数位数
方式一: double f = 3.1516; BigDecimal b = new BigDecimal(f); , BigDecimal.ROUND_HALF_UP).doubleValue(); ...
- C# Newtonsoft.Json JObject移除属性,在序列化时忽略
原文 C# Newtonsoft.Json JObject移除属性,在序列化时忽略 一.针对 单个 对象移除属性,序列化时忽略处理 JObject实例的 Remove() 方法,可以在 指定序列化时移 ...
随机推荐
- git 忽略不提交的文件3种情形
1..gitignore文件 :从未提交过的文件,从来没有被 Git 记录过的文件 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件.只能作用于未跟踪的文件( ...
- 实现react中的自动保存--定时任务
1. 定义和用法 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或 ...
- 单机Hadoop的安装与使用
第一步:安装操作系统并创建Hadoop用户 OS:RHEL6.5 [root@hadoop ~]# useradd hadoop [root@hadoop ~]# passwd hadoop 第二步: ...
- Java第六次作业--异常处理和Java类集
Deadline: 2017-5-4 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 理解Java的异常处理机制 掌握捕获异常和声明抛出异常的方法 掌握List接口的实现类Array ...
- Linux 定制X86平台操作系统
/********************************************************************************* * Linux 定制X86平台操作 ...
- Mysql的日期转换成星期[某天对应周几]
|—— 应用中会有各种不同的需求,要灵活应对:比如拿到某一日期要知道是周几 |——DAYOFWEEK(date) [返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六).这些索引值对 ...
- nodejs通过buffer传递数据到前端,前端通过arraybuffer接收数据
以后端传送threejs中的点阵数组为例: 后端: let buffer = Buffer.alloc((points.length + 4) * 4) //points.length + 4:预留前 ...
- test20181019 B君的第二题
题意 分析 快速子集和变换以及快速超集和变换的裸题. 用\(f(s)\)表示集合s的方案数,初始化为输入中s出现的次数. 做一遍快速子集和变换,此时f(s)表示s及其子集在输入中出现的次数. 对所有f ...
- Windows Server Core Command (管理服务器核心的具体操作命令)
从 Windows Server 2008 开始,管理员可以选择安装具有特定功能但不包含任何不必要功能的 Windows Server 的最小安装服务器核心(Server Core),它为一些特定服务 ...
- java对象模型
java对象模型其实就是JVM中对象的内存布局.一个对象本身内在结构的描述信息以字节码的方式存储在方法区中(参见java内存区域),说白了就是class文件.那么如何获取到对象的class信息呢?虚拟 ...