長い一日の後、そして別の...多くのウィキやよくある質問を読んだ後、それはついに機能します。
私がしたこと:
- ジャクソンを使用する
- ジャクソンプロバイダーの使用を強制する
- カスタムデシリアライザーを定義する
- ACCEPT_SINGLE_VALUE_AS_ARRAYフラグをアクティブにします
- 依存関係を修正する
物語:
私はデフォルトで(私は信じている)jaxbを使用するJersey1.13を使用していました。
ジャクソンを使うように変更しました
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
で説明されているように:
https://stackoverflow.com/a/13895768/660990
これにより、私のジャージはジャクソンを使用するようになりましたが、問題は残っています。jacksonはまだアレイを逆シリアル化できません。
私はジャクソンプロバイダーの使用を強制しました:
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>
your.project.packages;
org.codehaus.jackson.jaxrs</param-value>
</init-param>
https://stackoverflow.com/a/3143214/660990
必要なステップでしたが、十分ではありませんでした。ACCEPT_SINGLE_VALUE_AS_ARRAYフラグをアクティブにする必要があります。
ObjectMapper objectMapper;
objectMapper = new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
カスタムデシリアライザーを定義する必要がありました
public class MyResolver implements ContextResolver<ObjectMapper> {
@Override
public ObjectMapper getContext(final Class<?> objectType) {
...
return objectMapper;
}
}
それを行うために:
カスタマイズ-ObjectMapper
これをすべて行った後でも、それは機能しませんでした...
もう少し検索した後、私は見つけました:
ジャクソン2.0とジャージー1.12
依存関係の問題について説明します。
これは私の問題を明らかにしました、ジャージーv1.13はジャクソンv1.9.2と一緒に出荷されます私はジャクソンv2.0が必要です
jackson 1.9.2が含まれているため、jersey-jsonの依存関係を削除しました。
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
</dependency>
そして、直接宣言された依存関係:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>
参照:
jackson-jaxrs-json-provider
注:この変更により、Jaxbまたはjettisonを使用するJerseyの機能が削除されます。
トピックから外れて、誰かにとって興味深いかもしれません:
JSONフィールドの命名に@XmlElementフィールドアノテーションを使用しないようにJersey/Jacksonを構成します