我正在编写一个通用的JSON反序列化,使用ObjectMapper(com.fasterxml.Jackson库的)函数接收对象类型和集合/映射类型作为参数。
// Reading a single object from JSON String
public static <T> Object readObjectFromString(String string, Class<T> type) {
try {
return objectMapper.readValue(string, type);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// Reading a Collection object from JSON String
public static <T> Object readCollectionObjectsFromString(String string, Class<? extends Collection> collectionType, Class<T> type) {
try {
CollectionType typeReference =
TypeFactory.defaultInstance().constructCollectionType(collectionType, type);
return objectMapper.readValue(string, typeReference);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// Reading a Map object from JSON String
public static <T> Object readCollectionObjectsFromString(String string, Class<? extends Map> mapType, Class<T> keyType, Class<T> valueType) {
try {
MapType typeReference =
TypeFactory.defaultInstance().constructMapType(mapType, keyType, valueType);
return objectMapper.readValue(string, typeReference);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Map<A,List<Map<B,C>>> nestedGenericObject1
List<Map<A,B>> nestedGenericObject2
Map<List<A>,List<B>> nestedGenericObject3
// etc...
您可以使用typereference
:
java prettyprint-override">TypeReference<Map<A, List<Map<B, C>>>> typeReference =
new TypeReference<Map<A, List<Map<B, C>>>>() {};
Map<A, List<Map<B, C>>> data = mapper.readValue(json, typeReference);
如果要将其封装在一个方法中,可以使用一个方法,例如:
public <T> T parse(String json, TypeReference<T> typeReference) throws IOException {
return mapper.readValue(json, typeReference);
}
TypeReference<Map<A, List<Map<B, C>>>> typeReference =
new TypeReference<Map<A, List<Map<B, C>>>>() {};
Map<A, List<Map<B, C>>> data = parse(json, typeReference);
给定这样一个类 如何实现可以处理嵌套泛型类型的自定义Kafka反序列化器? 附注:我正在使用jackson进行序列化/反序列化。
我正在尝试使用Jakson反序列化一个嵌套的多态类型。也就是说,我的顶级类型引用了另一个多态类型,该类型最终由不抽象的类扩展。这不起作用,它会抛出一个异常。 下面是我尝试做的一个简化的例子。 我得到了关于抽象类型的标准异常。 让我解释一下我的用例。我有一个描述数据工作流的Json文档。我在“Level One”有一个抽象类型,描述对单个值的操作。我派生了一堆不是抽象的类,它们实现了公共操作(我用@
问题内容: 我正在尝试使用Jakson反序列化嵌套的多态类型。意思是我的顶级类型引用了另一个多态类型,该类型最终由不是抽象的类扩展。这不起作用,并引发异常。 这是我要尝试做的简化示例。 我得到有关抽象类型的标准例外。 让我解释一下我的用例。我有一个描述数据工作流程的Json文档。我在“一级”有一个抽象类型,描述了对单个值的操作。我派生了一堆不是抽象的类,它们实现了常见的操作(我用@JsonSubT
问题内容: 我正在尝试制作一个使用Jackson来反序列化POJO的类。 看起来像这样… 我对此实施有2个问题。 首先是我将类类型传递给方法,以便对象映射器知道应反序列化的类型。有使用泛型的更好方法吗? 同样在get方法中,我将一个从objectMapper返回的对象强制转换为T。这看起来特别讨厌,因为我必须在此处强制转换T,然后还必须从调用它的方法中强制转换对象类型。 我在该项目中使用了Robo
我在Android应用程序中实现Json反序列化时遇到了一些问题(带有Gson库)