Jackson with Generics JSON 无法构造 java.lang.Class 的实例

Jackson with Generics JSON Can not construct instance of java.lang.Class

我有一个包含多个 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);

会解决您的问题