`
snrqtdhuqf
  • 浏览: 79267 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用jackson发生UnrecognizedPropertyException异常

    博客分类:
  • Java
 
阅读更多

使用的jackson版本为

jackson-databind-2.1.3.jar

jackson-annotations-2.1.2.jar

jackson-core-2.1.3.jar

在使用过程中发生了一个如下异常

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "age" (class test.json.TE), not marked as ignorable (3 known properties: , "id", "name", "flag"])
 at [Source: java.io.StringReader@18f5824; line: 1, column: 43] (through reference chain: test.json.TE["age"])
	at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79)
	at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:579)
	at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:672)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:906)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:328)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2797)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1943)
	at test.json.TestJson.jsonToClass(TestJson.java:21)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:292)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

 测试代码如下:

package test.json;

import java.io.Serializable;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.junit.Test;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestJson {
	
	@Test
	public void jsonToClass() {
		String s = "{\"id\":1,\"name\":\"test\",\"flag\":true,\"age\":19}";
		
		ObjectMapper mapper = new ObjectMapper();
		//mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		TE t;
		try {
			t = mapper.readValue(s, TE.class);
			System.out.println(ToStringBuilder.reflectionToString(t));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

class TE implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private long id;
	private String name;
	private boolean flag;
	//private int age;
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	/*public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}*/
	
}

 原因是json的字符串中多了个age属性,在砖的时候TE类中没有此属性

这种情况是正常情况,一边改了,一边没改,该如何解决此问题

http://wiki.fasterxml.com/JacksonHowToIgnoreUnknown

这是查到的解决方法,我用的版本是2.1版本的,修改如下

package test.json;

import java.io.Serializable;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.junit.Test;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestJson {
	
	@Test
	public void jsonToClass() {
		String s = "{\"id\":1,\"name\":\"test\",\"flag\":true,\"age\":19}";
		
		ObjectMapper mapper = new ObjectMapper();
		mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		TE t;
		try {
			t = mapper.readValue(s, TE.class);
			System.out.println(ToStringBuilder.reflectionToString(t));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

class TE implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private long id;
	private String name;
	private boolean flag;
	//private int age;
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	/*public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}*/
	
}

 增加了

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
分享到:
评论

相关推荐

    spring使用jackson实现json

    在Spring中,我们通常会使用`Jackson.databind`模块,因为它提供了`ObjectMapper`类,可以方便地将Java对象转换为JSON字符串,反之亦然。为了集成Jackson,首先需要在项目中引入对应的依赖。对于Maven项目,可以在...

    SSM框架json使用jackson

    6. **错误处理**:在处理JSON数据时,Jackson会抛出异常,如`JsonParseException`和`JsonMappingException`,我们需要捕获这些异常并进行适当的错误处理。 为了在SSM项目中使用Jackson,我们需要在`pom.xml`文件中...

    使用Jackson在Java中处理JSON

    本篇文章将深入探讨如何使用Jackson在Java中进行JSON操作。 首先,Jackson库主要由三个模块组成: 1. **Jackson-core**: 这是Jackson库的基础模块,包含了基本的JSON流处理API,如`JsonParser`和`JsonGenerator`,...

    Jackson包(适合spring4.X版本的使用)

    本篇文章将深入探讨Jackson在Spring 4.X中的使用及其组件,以帮助开发者更好地理解和应用。 首先,我们来看一下Jackson的主要组件: 1. **jackson-databind**:这是Jackson的核心组件,负责对象与JSON之间的映射。...

    jackson-annotations、jackson-core、jackson-databind

    在IT行业中,Jackson库是Java领域广泛使用的JSON处理库,特别是在Spring框架中。"jackson-annotations"、"jackson-core"和"jackson-databind"是Jackson库的三个核心模块,它们协同工作,提供了强大的JSON序列化和反...

    使用Jackson框架解析jar包

    这个场景中,我们关注的是如何使用Jackson框架解析jar包中的数据,这通常涉及到将Java对象转换为JSON格式,或者从JSON字符串还原为Java对象。 标题"使用Jackson框架解析jar包"指的是利用Jackson库来处理包含在jar...

    spreadboot之Jackson配置与使用例子.docx

    Jackson 在 SpringBoot 中的配置与使用 Jackson 是一个流行的 JSON 处理库,SpringBoot 默认使用 Jackson 作为 JSON 转换工具。在 SpringBoot 项目中,Jackson 的配置可以通过多种方式实现,包括使用 application....

    jackson-annotations jackson-core jackson-databind

    Jackson是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。在Spring MVC框架中,当我们的控制器需要返回JSON格式的数据给前端时,Jackson库就扮演了至关重要的角色。标题提到的"jackson-annotations"、...

    SpringMVC使用JSON的Jackson的jar包

    Jackson是Java中广泛使用的JSON处理库,它提供了多种功能,如JSON序列化、反序列化、数据绑定等。Jackson分为多个模块,包括`jackson-databind`、`jackson-core`和`jackson-annotations`等。在早期版本中,这些模块...

    jackson-annotations-2.9.5.jar ,jackson-core-2.9.5.jar,jackson-databind-2.9.5.jar

    Jackson是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。这个压缩包包含的三个核心组件——`jackson-annotations-2.9.5.jar`、`jackson-core-2.9.5.jar`和`jackson-databind-2.9.5.jar`是Jackson库的...

    Jackson 2.9.3 和 jackson 2.9.3源码

    通过查看源码,开发者可以深入了解Jackson的工作原理,例如它是如何进行性能优化的,如何处理各种复杂的JSON结构,以及如何处理异常情况。源码中还包括了单元测试,可以帮助开发者验证其自定义功能或修复问题。 ...

    jackson 全部jar包

    8. **错误处理**:Jackson提供了一套完整的错误处理机制,包括异常类和错误报告,帮助开发者快速定位和解决JSON处理过程中的问题。 9. **配置选项**:Jackson提供了大量的配置选项,允许开发者根据项目需求定制JSON...

    jackson-core所需的三个包;jackson-databind.jar,jackson-annotations.jar,jackson-core.jar

    Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、转换JSON数据。在Spring MVC框架中,Jackson库通常用于处理HTTP请求和响应中的JSON数据,使得Java对象能够方便地序列化为JSON...

    使用jackson完成json与Java对象互转

    本文将详细介绍如何使用Jackson库进行JSON与Java对象的互转。 首先,我们需要引入Jackson库的依赖。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.fasterxml.jackson.core</groupId> ...

    jackson-annotations.jar jackson-core.jar jackson-databind.jar

    Jackson是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。这个库的主要功能是将Java对象转换为JSON格式,同时也能够将JSON数据转换回Java对象,极大地简化了JSON的序列化和反序列化操作。在给定的...

    使用Jackson框架解析Json示例

    jackson-annotations-2.0.0.jar jackson-core-2.0.0.jar jackson-databind-2.0.0.jar json-lib-2.4-jdk15.jar

    jackson-databind jackson-annatation jackson-core jackson-mapper

    Jackson是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。它提供了高效、功能丰富的处理JSON的方式,包括序列化和反序列化。在这个包中提到了四个关键组件:"jackson-databind"、"jackson-annotations...

    json转换工具jackson

    Jackson 在处理过程中遇到问题时会抛出异常,如`JsonParseException`、`JsonMappingException`等,需要在代码中适当地捕获和处理。 9. **与其他库的集成** Jackson 可以很好地与Spring、Hibernate等其他框架集成...

    JacksonUtil及Jar包1.9

    这个jar包很可能包含了Jackson库的所有组件,包括Jackson-core、Jackson-databind和Jackson-annotations等,这样你就可以直接在项目中使用JacksonUtil的全部功能了。确保在项目的类路径中包含这个jar包,这样编译器...

    jackson 1.5中文帮助文档

    Jackson是Java领域中广泛使用的JSON处理库,以其高效性能和易用性著称。1.5版本虽然相对较老,但其核心概念和功能对于理解JSON序列化和反序列化仍具有重要价值。以下是对Jackson 1.5中文帮助文档中的关键知识点的...

Global site tag (gtag.js) - Google Analytics