私はジャクソンのサンプルコードを使って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)
わかりません
Jackson JARが同期していないと思います。 JavaType
クラスはjackson-core
JARにあり、ObjectMapper
クラスはjackson-mapper
にあります。
これらが両方とも同じバージョンであることを確認してください。
私も同じ問題を抱えていました。コアjarは1.7.1、マッパーは1.8.1でした。注:これをmavenで修正するために、除外を追加して適切なバージョンをプルダウンしました。
<exclusions>
<exclusion>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</exclusion>
</exclusions>
ここでのトリックは、ジャクソンをそれを使用する依存関係から除外することです。
インポートする依存関係を確認するには、次のmavenコマンドを使用します。
mvn dependency:tree -Dincludes=org.codehaus.jackson
私の場合、これを引き起こしたのは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>
私の場合、古いバージョンのジャクソンを含む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>
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>
@RequestBodyは異なるバージョンの異なるjarを使用するためです。異なるバージョンのjarを追加する必要があるよりも、Spring 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>
はい、この問題に直面している人は誰でも、彼は依存関係を明確に調査する必要があります
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>
それを追跡するのに数時間かかりました。私にインスピレーションを与えた上記の解決策をみんなに感謝します!今後ともよろしくお願いいたします。