0
코드의 실제 오류를 알아 냈으므로 다시 작성하고 있습니다.Jackson 및 하위 클래스의 제네릭 유형
이 (나는 잭슨 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과 함께하고 있습니까? 최신 Jackson 2는이 유형과 객체 계층 구조를 잘 처리해야합니다. –