-1
class A<T extends Animal>{
  @XmlElement
  T animal;
}

@XmlRootElement(name="animal")
class Animal{
}

//@XmlRootElement(name="Birds")
class Birds extends Animal{
 ArrayList<String> someNames;
relavant fields ..with getter/setter and annotation
}

//@XmlRootElement(name="Fish")
class Fish extends Animal{
relavant fields ..with getter/setter and annotation
}

org.codehaus.jackson を使用して、Bean を Json String に変換できました。しかし、org.codehaus.jackson を使用して Json String を Java Bean に変換しようとすると、

JsonFactory jf = new JsonFactory(); 
JsonParser jp = null;

A<Bird> bird = null;
bird = inputMapper.readValue(jp, A.class);

私は得る

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "someNames" .

ゲッターとセッターに @XmlElement アノテーションを付けました。

4

1 に答える 1

0

解決策を見つけました http://programmerbruce.blogspot.in/2011/05/deserialize-json-with-jackson-into.html

上記のリンクの例 4 を参照してください。@JsonTypeInfo と @JsonSubTypes の 2 つのアノテーションを付けることで、問題は解決します。

@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.PROPERTY,
        property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value = Birds.class, name = "birds"),
        @JsonSubTypes.Type(value = Fish.class, name = "fish") })
@XmlRootElement(name="animal")
class Animal{
}

注釈の"type"パラメーターに注意してください@JsonTypeInfo

1)をシリアライズする際に、"type"param が Jackson フレームワークによって導入されます。

Birds インスタンスの場合、次のように"type"導入され ます。"animal":{"type":"birds", "":"" ....}

同様に、Fish の場合は次のように"type"導入されます 。"animal":{"type":"fish", "":"" ....}

2) Deserializing 中"type"Jackson Framework はパラメーターを使用して、実行時にポリモーフィックな汎用インスタンス Bean をインスタンス化します。

于 2013-06-09T19:02:17.013 に答える