Jackson ObjectMapper()构造函数抛出NoSuchMethod

我正在使用Jackson示例代码反序列化POJO:

ObjectMapper m = new ObjectMapper(); 

该行抛出NoSuchMethodError:

 Exception in thread "main" java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.(Ljava/lang/Class;)V at org.codehaus.jackson.map.type.TypeBase.(TypeBase.java:15) at org.codehaus.jackson.map.type.SimpleType.(SimpleType.java:45) at org.codehaus.jackson.map.type.SimpleType.(SimpleType.java:40) at org.codehaus.jackson.map.type.TypeBindings.(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.(ObjectMapper.java:179) at com.me.util.ctrl.BillingJobStatus.fromJson(BillingJobStatus.java:37) 

我不明白

我猜你的jacksonJAR不同步。 JavaType类位于jackson-core JAR中, ObjectMapper类位于jackson-mapper

确保它们都是相同的版本。

我有同样的问题。 核心jar是1.7.1,而映射器是1.8.1。 注意:为了解决这个问题,我添加了一个排除项并下拉了正确的版本。

    org.codehaus.jackson jackson-mapper-asl   

这里的技巧是将jackson排除在使用它的依赖项之外。

要检查哪些依赖项导入它,您可以使用以下maven命令:

mvn dependency:tree -Dincludes=org.codehaus.jackson

在我的情况下,这是由于yammer-metrics库包括旧版本的jackson。

  com.yammer.metrics metrics-servlet 2.1.2   org.codehaus.jackson jackson-mapper-asl    

在我的情况下,amazonaws sdk导致了这一点。 仅使用jackson-mapper-asl的排除不起作用,但使用核心和映射器的排除做了:

   com.amazonaws aws-java-sdk 1.3.13   org.codehaus.jackson jackson-core-asl   org.codehaus.jackson jackson-mapper-asl    

在处理Hadoop时,我通过设置以下排除项来消除此错误

  org.apache.hadoop hadoop-core 1.0.1   org.codehaus.jackson jackson-mapper-asl    

@RequestBody是因为不同的弹簧版本使用不同的jar子:如果使用弹簧4而不是添加不同的jar子:

  com.fasterxml.jackson.core jackson-core 2.4.3   com.fasterxml.jackson.core jackson-databind 2.4.3  

如果使用弹簧3必须使用这个jar:

   org.codehaus.jackson jackson-mapper-asl 1.5.0  

是的,任何正面临这个问题的人,他应该定义调查依赖关系

 mvn dependency:tree -Dincludes=org.codehaus.jackson 

在我的情况下,我有一个jackson依赖于Atmosphere-Socket-io:

  org.atmosphere atmosphere-socketio 2.2.1   org.codehaus.jackson jackson-mapper-lgpl   org.codehaus.jackson jackson-core-lgpl    

我花了几个小时跟踪它,感谢所有人为上述解决方案带来的灵感! 保持良好的工作!

我将WebApp从Tomcat 6迁移到Tomcat 8时遇到了这个问题。在Tomcat6和Tomcat7上,我的WebApp可以正常启动,但在Tomcat8上我会得到这个exception(似乎T6和T7按字母顺序加载类但T8没有 – https://stackoverflow.com/a/26642798/1864614 )。

问题是我有两个版本的课程

  org.codehaus.jackson.map.ObjectMapper 

正如@wild_nothing所回答的那样,我检查了树的依赖关系以列出org.codehaus.jackson上的所有依赖

在我的情况下,问题是我有几个版本的库提供了这个类:

  • org.codehaus.jackson:jackson映射器,LGPL:jar子:1.5.0
  • org.codehaus.jackson:jackson – 核心LGPL:jar子:1.5.0
  • org.codehaus.jackson:jackson映射器,ASL中:jar:1.8.2
  • org.codehaus.jackson:jackson核心-ASL:jar子:1.8.2

我的解决方案是排除旧版本(1.5.0)并仅保留1.8.2版本

  cfm.foo jive   org.codehaus.jackson jackson-core-lgpl   org.codehaus.jackson jackson-mapper-lgpl    
  • 在这种情况下, jive取决于较旧的1.5.0版本