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版本