gpt4 book ai didi

java - 使用 Jackson 从 JSON 映射 BasicNameValuePair

转载 作者:行者123 更新时间:2023-11-30 03:09:21 25 4
gpt4 key购买 nike

我目前正在尝试反序列化 API 结果,如下所示

[{"name":"MyName","value":"MyValue"},{"name":"MyName2","value":"MyValue2"}]

ArrayList<BasicNameValuePair> entities = JsonUtils.getObjectMapper()
.readValue(receivedData.toString(),
new TypeReference<ArrayList<BasicNameValuePair>>() {});

然后出现如下异常

Exception mapping result.
No suitable constructor found for type...

因为这是 org.apache.http.message.BasicNameValuePair 的内部类,所以我无法以任何方式注释或编辑它。但我看到(从其他 android 项目)很多人使用这个类。有什么方法可以使它正常工作吗?从 BasicNameValuePair 序列化为 String 有效。

最佳答案

Jackson 使用反射来创建您的类的实例。默认情况下,它需要一个无参数的构造函数。 BasicNameValuePair 类没有这样的构造函数。它有一个带有两个参数的构造函数,一个用于name,一个用于value

通常,如果您控制了该类,则可以使用 @JsonProperty 注释构造函数参数,以便 Jackson 使用该构造函数而不是无参数构造函数。由于您无法控制代码,请使用 Mixins。

像这样声明一个类

public static abstract class BasicNameValuePairMixIn {
private BasicNameValuePairMixIn(@JsonProperty("name") String name, @JsonProperty("value") String value) { }
}

像这样配置你的ObjectMapper

// configuration for Jackson/fasterxml 
objectMapper.addMixInAnnotations(BasicNameValuePair.class, BasicNameValuePairMixIn.class);

Jackson 现在将使用 mixin 作为您类(class)的模板。

如果您使用的是旧版本的 Jackson,请使用描述的配置 here .

关于java - 使用 Jackson 从 JSON 映射 BasicNameValuePair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21259975/

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