我想将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
类。您可以直接将ObjectMapper
对象公开给服务层并执行反序列化。
如果你想从服务层屏蔽json
序列化机制,那么你可以将ObjectMapper
实现包装到另一个类中(就像你在代码中所做的那样)但是接受类类型作为方法参数而不是泛型类型。