Java 泛型:对象映射器将 JSON 转换为 Java 对象

Java Generics : Object Mapper Converting JSON to Java Object

我想将 json 字符串反序列化为 java 对象。我想写一个泛型方法。

public class ObjectSerializer<T> {

    T t;
    private ObjectMapper mapper = new ObjectMapper();


  /*  public Person deSerial(String json) throws Exception {
        TypeReference<Person> typeRef = new TypeReference<Person>() {};

        return mapper.readValue(json, typeRef);
    } */

    public T deSerialize(String jsonInput) throws Exception {
        TypeReference<T> typeRef
                = new TypeReference<T>() {};

       return mapper.readValue(jsonInput, typeRef);
    }
}

当我调用 deSerialize(validPersonJsonString) [validPersonJsonString : valid person JSON String] 时,它不起作用,它向我抛出错误:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.example.Person.

然而,当调用注释的 deSerial 方法时,它工作正常。请解释问题。

谢谢。

由于类型擦除,Jackson 不支持 TypeReference 泛型类型参数。 Here's 关于它的错误。

就您的用例而言,您根本不需要使用 ObjectSerializer class。您可以直接将 ObjectMapper 对象暴露给您的服务层并执行反序列化。

如果您想从服务层屏蔽 json 序列化机制,那么您可以将 ObjectMapper 实现包装到另一个 class 中(就像您在代码中所做的那样),然后, 接受 class 类型作为方法参数而不是泛型类型。