0
私はコードの実際のエラーを見つけたので、私は質問を書き直しています。ジャクソンとサブクラス内のジェネリックタイプ
これは、(私はジャクソン2.9.0を使用しています)私の問題の完全な機能の例です:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import java.io.IOException;
import java.net.URL;
import java.util.List;
public class MainClass {
public static class SubClass<TYPE> {
private List<TYPE> values;
public List<TYPE> getValues() {
return values;
}
public void setValues(List<TYPE> values) {
this.values = values;
}
}
public static class Foo {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
private SubClass<Foo> propertyFoo;
public SubClass<Foo> getPropertyFoo() {
return propertyFoo;
}
public void setPropertyFoo(SubClass propertyFoo) {
this.propertyFoo = propertyFoo;
}
public static void main(String args[]) throws IOException {
URL url = System.class.getResource("/testFoo.json");
ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.readerFor(MainClass.class);
MainClass mainClass = reader.readValue(url);
mainClass.getPropertyFoo().getValues().forEach(foo -> {
System.out.println(String.format("name: %s", foo.getName()));
});
}
}
注意不足している型パラメータ:
public void setPropertyFoo(SubClass propertyFoo)
代わりの
public void setPropertyFoo(SubClass<Foo> propertyFoo)
最初の形式はコンパイルされますが、実行時に次の例外が発生します
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to MainClass$Foo
これはお答えしますか? https://stackoverflow.com/a/41567297/460557? –
あなたの行動を再現することはできません。 [mcve]を入力してください。 「読者」とは何ですか?どのように初期化しましたか? –
ジャクソンのどのバージョンで作業していますか?最新のJackson 2は、このタイプとオブジェクト階層をうまく処理する必要があります。 –