Java Generics:Object Mapper将JSON转换为Java对象

问题描述 投票:0回答:1

我想将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方法时,它工作正常。请解释一下这个问题。

谢谢。

java generics objectmapper jackson-databind
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.