我正在使用fasterxml.jackson。我对readValue()
感到困惑。这是我的问题。
我知道jackson以两种不同的方式反序列化普通的JavaBean和Collection。
对于JavaBean,我们可以将MyBean.class
或new TypeReference<MyBean>
传递给readValue()
。对于收藏集,我们必须通过new TypeReference<List<MyBean>>
。这是因为TypeReference
保存了Collection删除的类型。我对吗? :)
现在我很困惑。如果MyBean
包含列表,那么我仍然可以通过MyBean.class
并且它可以正常运行。杰克逊是怎么做到的?
public class MyBean {
String str;
List<String> strList;
}
答案 0 :(得分:0)
你将MyBean.class
作为第二个参数传递给readValue()
,杰克逊可以通过反思得到这个类型。我猜杰克逊会做这样的事情:
MyBean.class.getDeclaredField("strList").getGenericType();
将导致java.util.List<java.lang.String>
类型。
请注意,您的非通用class MyBean
包含List<String>
。如果您有:例如:
class MyGenBean<T> {
List<T> list;
}
然后
MyGenBean.class.getDeclaredField("list").getGenericType();
会返回java.util.List<T>
,您需要TypeReference
。