`
sw1982
  • 浏览: 511176 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jackson JSON对象映射出多余字段的bug

 
阅读更多

 

调用方法

 

		  ObjectMapper mapper = new ObjectMapper();
//		  mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		  try {
			String json = mapper.writeValueAsString(new A());
			System.out.println(json);
		} catch (JsonGenerationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JsonMappingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 

 

类:

 

class A implements Serializable{
	public Integer a;
	public Integer B;
	/**
	 * @return the a
	 */
	public Integer getA() {
		return a;
	}
	/**
	 * @param a the a to set
	 */
	public void setA(Integer a) {
		this.a = a;
	}
	/**
	 * @return the b
	 */
	public Integer getB() {
		return B;
	}
	/**
	 * @param b the b to set
	 */
	public void setB(Integer b) {
		B = b;
	}
	
	
}

 

 

产生json串: 可以看出这里多了一个b字段。

 

{"a":null,"B":null,"b":null}

 

 

 

归根溯源的debug了十几层调用(jackson真心复杂过度了),定位到这个地方:

org.codehaus.jackson.map.introspect.POJOPropertiesCollector._addMethods()

 

其原理是反射访问class, 1获取可访问的public字段。2.获取get/set方法,并根据最低级的常理来推断出字段。

 

常理是什么? getField()方法,对应field字段。 这里也就是出现b字段的根源。

 

这框架是springmvc集成的,返回json对象非常方便,所以在定义页面对象po的时候,还是要小心的变量命名, 小写开头。

 

分享到:
评论
1 楼 di1984HIT 2016-07-04  
学习了~~

相关推荐

    Jackson高性能的JSON处理 v2.16.1.zip

    Jackson库的`jackson-databind`模块扩展了`jackson-core`,提供了映射Java对象到JSON和反之的能力。它支持多种数据绑定特性,如注解驱动的映射、类型安全的集合和Map转换、以及自定义序列化和反序列化逻辑。 在毕业...

    最新的高性能 JSON 处理jackson-2.8.8.jar下载

    2. **jackson-databind**: 这是Jackson库的核心部分,提供了基于注解的映射机制,使JSON数据可以自动映射到Java对象,反之亦然。通过`@JsonProperty`等注解,开发者可以指定哪些字段应该被序列化或反序列化。此外,`...

    jackson2.9.7

    `jackson-databind`是Jackson最核心且功能最强大的模块,它基于`jackson-core`和`jackson-annotations`,实现了自动将Java对象转换为JSON,以及将JSON数据还原为Java对象的功能。它通过 ObjectMapper 类来实现这一...

    jackson2.7最新

    2. **Jackson-databind**:这个模块实现了基于注解的映射功能,使得Jackson可以将JSON数据自动绑定到Java对象,反之亦然。`ObjectMapper`是这个模块的核心类,它负责实际的序列化和反序列化工作。 3. **Jackson-...

    jackson1.9.13&2.9.2

    1. `fasterxml.jackson.databind`模块:用于对象到JSON和JSON到对象的映射,这是Jackson最常用的部分,通过`ObjectMapper`类实现。 2. `fasterxml.jackson.core`模块:提供了基本的JSON解析器和生成器,如`...

    jackson 2.6.0

    `jackson-databind-2.6.0.jar` 包含了主要的映射功能,允许将Java对象绑定到JSON内容。它实现了`ObjectMapper`,这是一个关键组件,可以将任何Java对象转换为JSON字符串,反之亦然。`ObjectMapper`提供了丰富的API...

    jackson-2.11.0.zip

    2. **jackson-databind-2.11.0.jar**:这是Jackson最核心的模块,扩展了`jackson-core`,提供了基于Java Bean的映射功能,使得JSON与Java对象之间的映射变得简单。通过`ObjectMapper`类,你可以方便地将Java对象序列...

    jackson2.2.3

    - `jackson-databind`:这是Jackson框架的主要部分,它提供了一种高效、灵活的方式来映射JSON到Java对象,反之亦然。通过`ObjectMapper`类,你可以轻松地实现序列化和反序列化操作。 - `jackson-annotations`:这...

    jackson2.5.0 jar包(3个)

    2. **jackson-databind**: 这是Jackson库的核心功能模块,提供了将JSON数据映射到Java对象(以及反之)的能力。`ObjectMapper`是这个模块的主要类,它可以将JSON字符串转化为Java对象,也可以将Java对象转化为JSON...

    json-2.2.1可用

    1. **解析JSON**:将JSON字符串转换为Java对象,例如从网络响应中解析出数据模型。 2. **生成JSON**:将Java对象转换为JSON格式的字符串,便于发送到服务器或存储。 3. **流式处理**:对于大量数据,提供流式API来...

    jackson最新资源包适合spring4.X

    6. **数据绑定**:Jackson的数据绑定功能允许Java对象直接映射到JSON结构,反之亦然。通过`@JsonProperty`和`@JsonCreator`等注解,可以控制哪些字段参与序列化和反序列化,以及如何创建对象实例。 7. **类型转换**...

    jackson整合包,2.9.5全版本

    `jackson-databind`是主要的使用部分,提供对象到JSON和JSON到对象的映射功能;`jackson-core`提供了基本的流式解析和生成API;`jackson-annotations`是一系列用于定制序列化和反序列化的注解。 2. **序列化与反...

    Java_Jackson的核心部分,定义了流API以及基本的共享抽象.zip

    `ObjectMapper`是Jackson中的另一个重要抽象,它提供了一种便利的方式来映射Java对象到JSON和从JSON反序列化回Java对象。`ObjectMapper`支持多种高级功能,如类型转换、注解处理、日期格式化等,极大地简化了JSON与...

    jackson.2.6.1

    Jackson库主要包含四个核心模块:`jackson-core`、`jackson-databind`、`jackson-annotations`和`jackson-dataformat-xml`,它们分别负责JSON解析和生成的基础功能、面向对象的映射、注解支持以及XML与JSON之间的...

    最新版本 jackson 2.8.2 jar与spring 4.x @ResponseBody配合使用

    - **jackson-databind**:这是Jackson最核心的部分,提供了对象到JSON和JSON到对象的映射功能。它包括`ObjectMapper`类,可以方便地将Java对象转换为JSON字符串,反之亦然。在Spring MVC中,`@ResponseBody`注解...

Global site tag (gtag.js) - Google Analytics