Jackson ObjectMapper() constructor throws NoSuchMethod

后端 未结 9 1797
忘掉有多难
忘掉有多难 2020-12-09 03:40

I\'m using Jackson sample code to deserialize a POJO:

ObjectMapper m = new ObjectMapper();

This line throws a NoSuchMethodError:

         


        
相关标签:
9条回答
  • 2020-12-09 03:52

    Yes, anyone who is facing this issue, he should definetely investigate the dependencies with

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

    In my case, I had a jackson dependency on 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>
    

    It took me several hours to track that down, thank you all guys for the above solutions which inspired me! Keep up the good work!

    0 讨论(0)
  • 2020-12-09 03:54

    In my case it was the amazonaws sdk that caused this. Using just the exclusion for jackson-mapper-asl didn't work but using an exclusion for core and mapper did:

        <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>
    
    0 讨论(0)
  • 2020-12-09 03:55

    While working on Hadoop, I eliminated this error by setting the following exclusions

    <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>
    
    0 讨论(0)
  • 2020-12-09 03:55

    I'm guessing your Jackson JARs are out of sync. The JavaType class is in the jackson-core JAR, and the ObjectMapper class is in jackson-mapper.

    Make sure these are both of the same version.

    0 讨论(0)
  • 2020-12-09 04:00

    I have faced this problem when migrating my WebApp from Tomcat 6 to Tomcat 8. On Tomcat6 and Tomcat7 my WebApp would start just fine, but on Tomcat8 I would get this exception(seems that T6 and T7 loads classes alphabeticaly but T8 doesn't - https://stackoverflow.com/a/26642798/1864614).

    The problem was that I was having 2 versions of the class

    org.codehaus.jackson.map.ObjectMapper
    As answered by @wild_nothing I have checked dependency the tree to list all dependencies on org.codehaus.jackson

    In my case the problem was that I had several versions of libraries that provided this class:

    • 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

    My solution was to exclude the older versions(1.5.0) and only leave the 1.8.2 version

    <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>
    
    • in this case jive was depending on older 1.5.0 version
    0 讨论(0)
  • 2020-12-09 04:03

    it is beacuse of @RequestBody use different jars for different spring versions : if using spring 4 than have to add different jars :

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

    if using spring 3 have to use this jar :

     <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.5.0</version>
    </dependency>
    
    0 讨论(0)
提交回复
热议问题