質問

私は現在、ジャクソン1.4.2を使用していて、の脱3を試みています code UIからJavaコントローラー(サーブレット)に渡される値(タイプ情報の一意の識別子)。

複数のタイプがあります(例: ABCType, XYZType, 、など)すべてがAnから拡張されます AbstractType, 、しかし、各コンクリートタイプには、単一のパラメーター、一意の識別子を採用する静的な工場メソッドがあり、その識別子で表されるタイプオブジェクト(名前、関連するタイプ、説明、有効な頭字語など)を返します。各コンクリートタイプ内の静的方法(例: XYZType)で注釈が付けられます @JsonCreator:

@JsonCreator
public static XYZType getInstance(String code) {
    .....
}

私が見ている問題は、ジャクソンのマッパーによって投げられた例外です。

原因:org.codehaus.jackson.map.jsonmappingexception:タイプ[simple Type、class com.company.type.xyztype]のデフォルトコンストラクターはありません:jsonオブジェクトからインスタンス化できません。

ここで何が欠けているのか @JsonCreator 静的な工場法への注釈(または、Jackson 1.4.2と関係があります。 AbstractType?)?

役に立ちましたか?

解決

annotation @jsoncreatorには、annotation @jsonpropertyが必要です。これ ジャクソンウィキページ 情報はほとんどありませんが、サンプルコードを提供します。

@JsonCreator
public Name(@JsonProperty("givenName") String g, @JsonProperty("familyName") String f)
{
  givenName = g;
  familyName = f;
}

より詳細な説明があります このブログ投稿.

したがって、サンプルコードは次のように見えるはずです。

@JsonCreator
public static XYZType getInstance(@JsonProperty("someCode") String code)
{
 ...
}

他のヒント

問題は、ジャクソンが宣言されたベースタイプのみを見ており、サブタイプを探す場所を知らないことです。完全な多型タイプの取り扱いは1.5に追加されたため、1.4で行う必要があるのは、ベースクラスに工場メソッドを追加し、そこから発送することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top