ジャクソン (ジャージー) を使用してエンティティをシリアル化し、Jackson 1.9 から 2.0 に移行しています。私はこのガイドに従いましたが、最初はすべてが簡単にうまくいったように見えました.
しかし、よく見ると、Jackson 1.9 がまだ私の応答をシリアル化するために使用されていることがわかります。したがって、私の (移行された) Jackson 2.0 注釈は無視されます。次のコード フラグメントで、使用している注釈を確認できます。
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public abstract class IdEntity {
@Id
@JsonDeserialize(using = ObjectIdJsonDeserializer.class)
protected ObjectId id;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonSerialize(using = ObjectIdJsonSerializer.class)
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
@JsonIgnore
public String getIdAsString() {
return id == null ? "" : id.toString();
}
@JsonIgnore ゲッターがシリアル化され、ObjectIdJsonSerializer が ObjectId フィールドに使用されていません。
デバッグでは、使用されている ObjectMapper が 1.9 のものであることがわかります。
Jackson 1.9 への Maven の直接的な依存関係をすべて削除し、jersey-json に除外を追加して、Jackson 1.9 が取り込まれないようにしました。しかし、Jackson 1.9 を必要とする Spring AMQP も使用しているため、依存関係管理ですべての codehaus.jackson を除外することによって、それを完全に取り除くことはできません。
これを管理する方法についてのアイデアはありますか? 誰かが同様の問題に遭遇/解決しましたか? Jersey に Jackson 2.0 を強制的に使用させるにはどうすればよいですか?