我有问题。我使用自定义注释,它采用方法参数并将它们从json转换为pojo。这是一个例子:
...
MethodParameter param
// here a parameter from methods, marked with custom annotation
...
JSON_MAPPER.readValue(node, param.getParameterType());
java.util.LinkedHashMap cannot be cast to com.liferay.portal.kernel.util.KeyValuePair
但是当我尝试转换List<>它没有用。但下面的代码工作正常
JSON_MAPPER.readValue(node, new TypeReference<List<KeyValuePair>>(){});
我如何计算出收入数据的类型?我该怎么办?
答案 0 :(得分:2)
我将假设您的方法看起来像
public List<KeyValuePair> methodName(..) {..}
换句话说,它的返回类型是您希望将JSON解析为。
我还假设MethodParameter
是org.springframework.core.MethodParameter
。您会注意到MethodParameter#getParameterType()
返回Class<?>
。在这种情况下,它将返回Class
类型的List
对象。
鉴于List.class
,杰克逊无法猜出元素类型是什么。因此,它使用默认的LinkedHashMap
。
使用MethodParameter#getGenericParameterType()
方法,该方法将返回完全描述Type
返回类型的List<KeyValuePair>
对象。杰克逊将拥有足够的类型信息来构建JSON中的适当对象。
您需要将Type
转换为ObjectMapper#readValue
预期的JavaType
。
mapper.readValue(node, mapper.getTypeFactory().constructType(param.getGenericParameterType()));