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

时间:2019-02-15 09:43:53

标签: 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 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方法时,它可以正常工作。请说明问题。

谢谢。

1 个答案:

答案 0 :(得分:3)

由于类型擦除,杰克逊不支持带有通用类型参数的TypeReferenceHere's关于它的错误。

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

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