gpt4 book ai didi

java - Jackson ReadValue 不会转换为 List<>

转载 作者:行者123 更新时间:2023-12-02 04:21:19 25 4
gpt4 key购买 nike

我有一个问题。我使用自定义注释,它采用方法参数并将它们从 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>>(){});

如何找出收入数据的类型?我该怎么办?

最佳答案

我假设你的方法看起来像

public List<KeyValuePair> methodName(..) {..}

换句话说,它的返回类型就是您希望 JSON 解析为的类型。

我还将假设 MethodParameter org.springframework.core.MethodParameter 。您会注意到 MethodParameter#getParameterType() 返回 Class<?> 。在这种情况下,它将返回 Class List 的对象类型。

给定 List.class , jackson 无法猜测元素类型是什么。因此,它使用默认值 LinkedHashMap

使用 MethodParameter#getGenericParameterType() 方法将返回 Type对象完全描述List<KeyValuePair>返回类型。 Jackson 将从中获得足够的类型信息,以便从 JSON 构建适当的对象。

您需要转换 Type进入JavaType预计 ObjectMapper#readValue .

mapper.readValue(node, mapper.getTypeFactory().constructType(param.getGenericParameterType()));

关于java - Jackson ReadValue 不会转换为 List<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32743105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com