我有一个带有多个 Web 模块的 Java Web 应用程序。一个模块将充当服务器,另一个模块将充当客户端,两者都部署在不同的服务器中。客户端应用程序将通过休息服务调用服务器应用程序来获取和保存数据。我从服务器获取一个 JSON 字符串,并尝试将其转换为具有通用类型的对象。
这是我的对象
public class MyObject<T> {
private String name;
private List<T> list;
private final Class<T> referenceType;
@JsonCreator
public MyObject(@JsonProperty("referenceType") Class<T> referenceType) {
this.referenceType = referenceType;
list = new ArrayList<T>();
}
public Class<T> getReferenceType() {
return this.referenceType;
}
//getter and setter
}
在服务器中,我按以下方式设置对象
public String getAll(Long key) {
List<SomeObject> list = someObjectDao.getAll(key);
MyObject<SomeObject> myObject = new MyObject<SomeObject>(
SomeObject.class);
appObject.setList(list);
JSONObject jsonget = new JSONObject(myObject);
return jsonget.toString();
}
在客户端应用程序中,我得到这样的 JSON 字符串
{"name":"someName","referenceType":"class com.pkg.model.SomeObject","list":[{list - index - 0},{list - index-1}]}
我正在尝试通过以下方式将字符串转换为 MyObject 类型
private MyObject readJson(String output) throws Exception {
return new ObjectMapper().readValue(output,
new TypeReference<MyObject>() {
});
}
但是我遇到了以下异常,
Can not construct instance of java.lang.Class, problem: class com.pkg.model.SomeObject
at [Source: java.io.StringReader@4f906bf5; line: 1, column: 151]
如何将 JSON 字符串转换为对象?
谢谢。
最佳答案
您的客户端正常,您正在读取的 JSON 无效
以下内容将正确反序列化
"referenceType":"com.pkg.model.SomeObject"
这样你就会被列表部分困住了。
设置服务器端使用 jackson,例如
return new ObjectMapper().writeValueAsString(myObject);
可以解决您的问题
关于java - Jackson 与泛型 JSON 无法构造 java.lang.Class 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27939219/