我正在重写这个问题,因为我发现了代码中的实际错误。
这是我的问题的一个功能齐全的例子(我使用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
答案 0 :(得分:0)
正如我在新编辑的帖子中写的那样,我的问题在于那个二传手。虽然它编译它是一个例外,因为杰克逊无法找到适合用于内部物体的类型。
修复
public void setPropertyFoo(SubClass propertyFoo)
到
public void setPropertyFoo(SubClass<Foo> propertyFoo)
我知道这是一个微不足道的错误,但由于我已经花了所有这些时间来找到问题,也许它会帮助某人。如果mod / admin认为这没有帮助,我可以将其全部删除。