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

Java泛型:将JSON转换为Java对象的对象映射器,java,generics,objectmapper,jackson-databind,Java,Generics,Objectmapper,Jackson Databind,我想将json字符串反序列化为java对象。我想写一个通用方法 public class ObjectSerializer<T> { T t; private ObjectMapper mapper = new ObjectMapper(); /* public Person deSerial(String json) throws Exception { TypeReference<Person> typeRef = new

我想将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);
    }
}
然而,在调用commented
deSerial
方法时,它工作正常。请解释一下这个问题


谢谢。

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

就您的用例而言,您根本不需要使用
ObjectSerializer
类。您可以直接向服务层公开
ObjectMapper
对象并执行反序列化


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

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

就您的用例而言,您根本不需要使用
ObjectSerializer
类。您可以直接向服务层公开
ObjectMapper
对象并执行反序列化


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

我不认为在这里使用泛型有什么意义。只需将所需的类传递给
反序列化
,这样就可以像
反序列化(json,Person.class)一样调用它。更简单,更简单。嗨@Tom,明天我想和员工一起使用。课堂上,我将如何使用它?我不想为员工编写其他方法。class@Raghu使用类?与ObjectMapper允许您将json转换为对象的方式完全相同generic@SHAHAKASH你的评论是错误的。你混合了方法定义和方法调用。我不认为在这里使用泛型有什么意义。只需将所需的类传递给
反序列化
,这样就可以像
反序列化(json,Person.class)一样调用它。更简单,更简单。嗨@Tom,明天我想和员工一起使用。课堂上,我将如何使用它?我不想为员工编写其他方法。class@Raghu使用类?与ObjectMapper允许您将json转换为对象的方式完全相同generic@SHAHAKASH你的评论是错误的。您混合了方法定义和方法调用。Person=mapper.readValue(inputJson,Person.class);谢谢接受答案。Person=mapper.readValue(inputJson,Person.class);谢谢我接受了答案。
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.example.Person.