Java泛型:将JSON转换为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
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);
}
}
然而,在调用commenteddeSerial
方法时,它工作正常。请解释一下这个问题
谢谢。由于类型擦除,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.