我想将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
方法时,它可以正常工作。请说明问题。
谢谢。
答案 0 :(得分:3)
由于类型擦除,杰克逊不支持带有通用类型参数的TypeReference
。 Here's关于它的错误。
就您的用例而言,您根本不需要使用ObjectSerializer
类。您可以将ObjectMapper
对象直接暴露给服务层并执行反序列化。
如果您想从服务层屏蔽json
序列化机制,则可以将ObjectMapper
实现包装到另一个类中(就像您在代码中所做的一样),但是可以将类类型接受为方法参数而不是泛型类型。