使用的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.databind`模块,因为它提供了`ObjectMapper`类,可以方便地将Java对象转换为JSON字符串,反之亦然。为了集成Jackson,首先需要在项目中引入对应的依赖。对于Maven项目,可以在...
6. **错误处理**:在处理JSON数据时,Jackson会抛出异常,如`JsonParseException`和`JsonMappingException`,我们需要捕获这些异常并进行适当的错误处理。 为了在SSM项目中使用Jackson,我们需要在`pom.xml`文件中...
本篇文章将深入探讨如何使用Jackson在Java中进行JSON操作。 首先,Jackson库主要由三个模块组成: 1. **Jackson-core**: 这是Jackson库的基础模块,包含了基本的JSON流处理API,如`JsonParser`和`JsonGenerator`,...
本篇文章将深入探讨Jackson在Spring 4.X中的使用及其组件,以帮助开发者更好地理解和应用。 首先,我们来看一下Jackson的主要组件: 1. **jackson-databind**:这是Jackson的核心组件,负责对象与JSON之间的映射。...
在IT行业中,Jackson库是Java领域广泛使用的JSON处理库,特别是在Spring框架中。"jackson-annotations"、"jackson-core"和"jackson-databind"是Jackson库的三个核心模块,它们协同工作,提供了强大的JSON序列化和反...
这个场景中,我们关注的是如何使用Jackson框架解析jar包中的数据,这通常涉及到将Java对象转换为JSON格式,或者从JSON字符串还原为Java对象。 标题"使用Jackson框架解析jar包"指的是利用Jackson库来处理包含在jar...
Jackson 在 SpringBoot 中的配置与使用 Jackson 是一个流行的 JSON 处理库,SpringBoot 默认使用 Jackson 作为 JSON 转换工具。在 SpringBoot 项目中,Jackson 的配置可以通过多种方式实现,包括使用 application....
Jackson是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。在Spring MVC框架中,当我们的控制器需要返回JSON格式的数据给前端时,Jackson库就扮演了至关重要的角色。标题提到的"jackson-annotations"、...
Jackson是Java中广泛使用的JSON处理库,它提供了多种功能,如JSON序列化、反序列化、数据绑定等。Jackson分为多个模块,包括`jackson-databind`、`jackson-core`和`jackson-annotations`等。在早期版本中,这些模块...
Jackson是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。这个压缩包包含的三个核心组件——`jackson-annotations-2.9.5.jar`、`jackson-core-2.9.5.jar`和`jackson-databind-2.9.5.jar`是Jackson库的...
通过查看源码,开发者可以深入了解Jackson的工作原理,例如它是如何进行性能优化的,如何处理各种复杂的JSON结构,以及如何处理异常情况。源码中还包括了单元测试,可以帮助开发者验证其自定义功能或修复问题。 ...
8. **错误处理**:Jackson提供了一套完整的错误处理机制,包括异常类和错误报告,帮助开发者快速定位和解决JSON处理过程中的问题。 9. **配置选项**:Jackson提供了大量的配置选项,允许开发者根据项目需求定制JSON...
Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、转换JSON数据。在Spring MVC框架中,Jackson库通常用于处理HTTP请求和响应中的JSON数据,使得Java对象能够方便地序列化为JSON...
本文将详细介绍如何使用Jackson库进行JSON与Java对象的互转。 首先,我们需要引入Jackson库的依赖。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.fasterxml.jackson.core</groupId> ...
Jackson是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。这个库的主要功能是将Java对象转换为JSON格式,同时也能够将JSON数据转换回Java对象,极大地简化了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是Java领域中广泛使用的JSON处理库,由FasterXML公司开发并维护。它提供了高效、功能丰富的处理JSON的方式,包括序列化和反序列化。在这个包中提到了四个关键组件:"jackson-databind"、"jackson-annotations...
Jackson 在处理过程中遇到问题时会抛出异常,如`JsonParseException`、`JsonMappingException`等,需要在代码中适当地捕获和处理。 9. **与其他库的集成** Jackson 可以很好地与Spring、Hibernate等其他框架集成...
这个jar包很可能包含了Jackson库的所有组件,包括Jackson-core、Jackson-databind和Jackson-annotations等,这样你就可以直接在项目中使用JacksonUtil的全部功能了。确保在项目的类路径中包含这个jar包,这样编译器...
Jackson是Java领域中广泛使用的JSON处理库,以其高效性能和易用性著称。1.5版本虽然相对较老,但其核心概念和功能对于理解JSON序列化和反序列化仍具有重要价值。以下是对Jackson 1.5中文帮助文档中的关键知识点的...