`

java 序列化时排除指定属性

    博客分类:
  • 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 

 

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

 

  • 大小: 24.5 KB
0
0
分享到:
评论

相关推荐

    jackson库实现定制化的java序列化反序列化操作

    标题中的“jackson库实现定制化的java序列化反序列化操作”指的是利用Jackson库的能力,通过自定义规则来控制对象的序列化和反序列化过程。这通常涉及到创建自定义的`JsonSerializer`和`JsonDeserializer`,或者使用...

    加快Java的文件序列化速度

    - **精简对象属性**:只序列化必要的字段,不必要的属性可以通过transient关键字排除。 2. **使用FastSerializable接口**: - Java的标准序列化机制虽然方便,但效率较低。可以自定义实现序列化接口,如使用Kryo...

    如何利用Jackson序列化忽略指定类型的属性详解

    然而,在序列化 Apache Avro 对象时,可能会遇到一些问题,例如序列化 Apache Avro 对象的 Schema 属性时抛出异常。 问题的根源在于 Apache Avro 对象的 Schema 属性中含有一个 getSchema() 方法,该方法返回一个 ...

    C#对象序列化与反序列化

    - **排除不需要序列化的成员**:使用`[XmlIgnore]`特性来排除某个成员。 - **强制指定成员的序列化顺序**:使用`[XmlElement(Order = n)]`特性来控制成员的序列化顺序。 - **自定义序列化行为**:通过实现`...

    spring-mvc序列化json动态擦除属性[参考].pdf

    该接口包含一个`getEraseType`方法,用于返回一个类型标识,以便在擦除属性时根据这个类型查找相应的规则。 ```java // Eraseable.java public interface Eraseable { String getEraseType(); } ``` 接下来,我们...

    spring-mvc序列化json动态擦除属性[参照].pdf

    以上方案的优点在于,通过注解和AOP,我们可以将数据序列化的逻辑封装起来,使得业务代码更简洁,同时可以根据不同的场景动态地调整需要序列化的属性,提高了代码的可维护性和灵活性。 总结来说,本方案的核心是...

    将Java对象序列化成JSON和XML格式的实例

    Java对象序列化是将程序中的对象转换为可存储或传输的形式的过程。这通常涉及到将对象的状态转换为一种标准格式,如JSON(JavaScript Object Notation)或XML(eXtensible Markup Language)。这两种格式广泛用于...

    jackson2.8

    比如,`@JsonProperty`用于指定哪个字段应该被序列化或反序列化,`@JsonIgnore`用于忽略某个属性,`@JsonInclude`和`@JsonExclude`用于控制序列化时哪些属性应该包含或排除,还有`@JsonFormat`可以指定日期和时间的...

    Java_squigly Filter是一个Jackson JSON PropertyFilter,它使用Facebo.zip

    然后,通过`@JsonFilter`注解在你的Java类或者属性上声明这个过滤器,这样Jackson在序列化时就会应用这些规则。 举个例子,假设我们有一个`User`类,其中包含`name`、`email`和`password`等字段,我们可能不希望在...

    jackson开发所需jar包

    - `@JsonProperty`:标记类的属性,使其在序列化和反序列化时被处理。 - `@JsonIgnore`:排除某个属性,不让其出现在JSON中。 - `@JsonInclude`:指定哪些字段应被包含,哪些不应被包含。 - `@JsonAutoDetect`:...

    jackson-annotations-2.9.0jar包.zip

    4. `@JsonInclude`: 控制在序列化时哪些属性应该被包含,例如可以排除null值。 5. `@JsonFormat`: 用于规定日期、时间等值的格式化方式。 6. `@JsonTypeInfo` 和 `@JsonSubTypes`: 用于处理多态类型序列化和反序列...

    java操作json通用类以及所需jar包

    在类上使用`@JsonProperty`注解指定JSON字段对应的Java属性,`@JsonIgnore`注解排除不需要映射的属性。 ```java public class YourJavaClass { @JsonProperty("jsonField") private String javaField; // ...

    json需要的所有JAR

    例如,`@JsonProperty`用于指定字段与JSON键的对应关系,`@JsonInclude`用于控制哪些属性应该包含在序列化的JSON中,`@JsonIgnore`则可以排除某些属性不参与序列化或反序列化等。 2. **Jackson-Core-2.7.4**: 核心...

    jackson all 2.2.3

    例如,`@JsonProperty`用于指定哪个字段应该被序列化或反序列化,`@JsonIgnore`用于忽略特定字段,`@JsonInclude`和`@JsonExclude`用于控制哪些属性应该在序列化时包含或排除,还有`@JsonAutoDetect`用于定义字段、...

    jackson2.6.0新版本4个jar包.rar

    例如,`@JsonProperty`用于指定一个字段与JSON属性的映射,`@JsonIgnore`用于忽略某个字段,`@JsonInclude`和`@JsonExclude`用于控制序列化时哪些属性应被包含或排除,等等。 4. **jackson-modules-java8.jar**: 这...

    jacksonAll

    例如,`@JsonIgnore`可以忽略某个属性,`@JsonInclude`和`@JsonExclude`用于控制序列化时哪些属性应被包含或排除,`@JsonFormat`可以指定日期或时间的格式等。 在压缩包中的"META-INF"目录通常包含了关于库的信息,...

    jackson jar包

    比如,`@JsonProperty`用于指定哪个字段应被序列化或反序列化,`@JsonIgnore`用于忽略某个字段,`@JsonInclude`和`@JsonExclude`控制序列化时哪些属性应该被包含或排除。 4. **类型转换**: Jackson支持多种复杂类型...

    Jackson jar文件.rar

    例如,`@JsonProperty`用于指定属性与JSON字段的映射,`@JsonInclude`用于控制哪些属性应该被包括在序列化过程中,`@JsonIgnore`则用于排除某些属性不参与序列化和反序列化。 2. **Jackson-Core-2.9.9.jar**:...

    jackson-databind-2.4.0 /2.4.4 /2.4.5.jar

    5. **@JsonInclude** 和 **@JsonExclude**: 控制序列化时哪些属性应包含或排除,提供了更细粒度的控制。 6. **Jackson Modules**: Jackson生态系统允许扩展,通过添加模块可以支持更多的数据格式和功能,如Joda-Time...

Global site tag (gtag.js) - Google Analytics