我正在使用Jackson示例代码反序列化POJO:
ObjectMapper m = new ObjectMapper();
此行抛出NoSuchMethodError:
Exception in thread "main" java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.<init>(Ljava/lang/Class;)V
at org.codehaus.jackson.map.type.TypeBase.<init>(TypeBase.java:15)
at org.codehaus.jackson.map.type.SimpleType.<init>(SimpleType.java:45)
at org.codehaus.jackson.map.type.SimpleType.<init>(SimpleType.java:40)
at org.codehaus.jackson.map.type.TypeBindings.<clinit>(TypeBindings.java:18)
at org.codehaus.jackson.map.type.TypeFactory._fromType(TypeFactory.java:525)
at org.codehaus.jackson.map.type.TypeFactory.type(TypeFactory.java:61)
at org.codehaus.jackson.map.ObjectMapper.<clinit>(ObjectMapper.java:179)
at com.me.util.ctrl.BillingJobStatus.fromJson(BillingJobStatus.java:37)
我不明白
答案 0 :(得分:28)
我猜你的杰克逊JAR不同步。 JavaType
类位于jackson-core
JAR中,ObjectMapper
类位于jackson-mapper
。
确保它们都是相同的版本。
答案 1 :(得分:5)
我有同样的问题。核心jar是1.7.1,而映射器是1.8.1。注意:为了解决这个问题,我添加了一个排除项并下拉了正确的版本。
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</exclusion>
</exclusions>
答案 2 :(得分:5)
这里的技巧是将jackson从使用它的依赖项中排除。
要检查哪些依赖项导入它,您可以使用以下maven命令:
mvn dependency:tree -Dincludes=org.codehaus.jackson
答案 3 :(得分:3)
在我的情况下,这是由于yammer-metrics库包括旧版的jackson。
<dependency>
<groupId>com.yammer.metrics</groupId>
<artifactId>metrics-servlet</artifactId>
<version>2.1.2</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 4 :(得分:3)
在我的情况下,amazonaws sdk引起了这种情况。仅使用jackson-mapper-asl的排除不起作用,但使用核心和映射器的排除做了:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.3.13</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 5 :(得分:2)
在处理Hadoop时,我通过设置以下排除项来消除此错误
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 6 :(得分:1)
@RequestBody是因为不同的弹簧版本使用不同的jar: 如果使用弹簧4而不是添加不同的罐子:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
如果使用弹簧3必须使用这个罐子:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.5.0</version>
</dependency>
答案 7 :(得分:0)
是的,任何遇到此问题的人,都应该使用
来定义调查依赖关系mvn dependency:tree -Dincludes=org.codehaus.jackson
在我的情况下,我有一个杰克逊依赖于Atmosphere-Socket-io:
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-socketio</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
</exclusion>
</exclusions>
</dependency>
我花了几个小时跟踪它,感谢所有人为上述解决方案带来的灵感!保持良好的工作!
答案 8 :(得分:0)
将WebApp从Tomcat 6迁移到Tomcat 8时,我遇到了这个问题。 在Tomcat6和Tomcat7上,我的WebApp会很好地启动,但在Tomcat8上我会得到这个异常(似乎T6和T7按字母顺序加载类,但是T8不会 - https://stackoverflow.com/a/26642798/1864614)。
问题是我有2个版本的课程
org.codehaus.jackson.map.ObjectMapper正如@wild_nothing所回答的那样,我检查了树的依赖关系,列出了对 org.codehaus.jackson 的所有依赖关系
我的解决方案是排除旧版本(1.5.0)并仅保留1.8.2版本
<dependency>
<groupId>cfm.foo</groupId>
<artifactId>jive</artifactId>
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
</exclusion>
</exclusions>
</dependency>