1

私はJSONをオブジェクトにマップするためにjacksonライブラリを使用しています。私は問題をたくさん単純化しました、これは何が起こるかです:

public class MyObject{

    public ForeignCollection<MySecondObject> getA(){
        return null;
    }

    public ForeignCollection<MyThirdObject> getB(){
        return null;
    }
}

空のJSON文字列を解析しています:

ObjectMapper mapper = new ObjectMapper();
mapper.readValue("{}", MyObject.class);

readValueで、私はこの例外を受け取ります:

com.fasterxml.jackson.databind.JsonMappingException: Can not find a deserializer for non-concrete Collection type [collection type; class com.j256.ormlite.dao.ForeignCollection, contains [simple type, class com.test.MyThirdObject]]

これは、クラスに。を返す​​2つの getメソッドがある場合に発生します。メソッドの1つを削除しても、例外は発生しません。MyObjectForeignCollectionget

マッパーがメソッドを見るという事実に実際に驚いていgetます。それは私が示すフィールドを設定するだけです。

ここで何が起きてるの?

4

3 に答える 3

2

を:に変換することでこれを修正しましForeignCollectionList

private ForeignCollection<MyObject> myObjects;

public List<MyObject> getMyObjects(){
    return new ArrayList<MyObject>(myObjects);
}
于 2013-02-17T12:08:31.103 に答える
1

のカスタム デシリアライザーを定義する必要がある場合がありますForeignCollection。または、既知の実装クラスがある場合は、注釈を使用します。

@JsonDeserialize(as=ForeignCollectionImpl.class)

その抽象型に使用する具体的なサブクラスを示します。

于 2013-02-14T05:54:48.853 に答える