23

我正在使用 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)

我不明白

4

9 回答 9

28

我猜你的杰克逊 JAR 不同步。类JavaTypejackson-coreJAR 中,ObjectMapper类在jackson-mapper.

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

于 2011-02-23T17:05:47.090 回答
5

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

        <exclusions>
            <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
            </exclusion>
        </exclusions>
于 2011-06-23T15:12:08.480 回答
5

这里的技巧是从使用它的依赖项中排除杰克逊。

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

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

于 2014-05-28T09:38:31.867 回答
3

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

<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>
于 2013-02-15T05:13:46.527 回答
3

就我而言,是 amazonaws sdk 导致了这种情况。仅对 jackson-mapper-asl 使用排除项不起作用,但对 core 和 mapper 使用排除项可以:

    <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>
于 2013-02-25T22:46:53.737 回答
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>
于 2012-09-03T17:22:16.190 回答
1

这是因为@RequestBody 对不同的弹簧版本使用不同的罐子:如果使用弹簧 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>

如果使用 spring 3 必须使用这个 jar :

 <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.5.0</version>
</dependency>
于 2015-10-15T15:13:24.150 回答
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>

我花了几个小时才找到它,谢谢大家为上述启发我的解决方案!保持良好的工作!

于 2015-03-24T15:52:26.223 回答
0

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

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

org.codehaus.jackson.map.ObjectMapper
正如@wild_nothing 所回答的那样,我检查了依赖树以列出对org.codehaus.jackson

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

  • org.codehaus.jackson:jackson-mapper-lgpl:jar:1.5.0
  • org.codehaus.jackson:jackson-core-lgpl:jar:1.5.0
  • org.codehaus.jackson:jackson-mapper-asl:jar:1.8.2
  • org.codehaus.jackson:jackson-core-asl:jar:1.8.2

我的解决方案是排除旧版本(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>
  • 在这种情况下,jive依赖于较旧的 1.5.0 版本
于 2017-03-31T07:22:01.240 回答