java - 使用 Jackson 从 JSON 映射 BasicNameValuePair

标签 java android json serialization jackson

我目前正在尝试反序列化 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/

相关文章:

java - Corba 序列<octet> 比使用套接字慢很多

java - 关于字符串连接行为

java - 我如何修复 "SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder”。

android - 在 Android 中将 SmbFile(Samba) 转换为位图

c# - 将 .NET DateTime 对象转换为 Javascript Date 对象

java - 如何为 NetBeans Java Web App 项目向 Ant 添加 jar 文件以便构建它?

android - 当我滚动 ListView 时,项目在 ListView 中的位置正在改变

java - android-为什么我无法获取设备方向?

java - 如何使用 GSON 从 json 树获取 json 值

Android - 无法使用 Retrofit 在变量名中获取带破折号的整数