无法从VALUE_STRING标记中反序列化java.lang.String []的实例

时间:2017-03-31 03:34:46

标签: java android json jackson

无法从VALUE_STRING令牌[...]中反序列化java.lang.String []的实例(通过参考链:[...]。model.User [“ethnicities”])

我有一个带有属性ethnicities的用户对象。

据我所知,错误是因为json“type”与属性类型不匹配,但在我的情况下,两者都是String数组。

我做错了吗?

另外,我无法弄清楚解析中VALUE_STRING代表什么。

服务器端使用Loopback,种族属性定义如下:

"ethnicities": [ "" ]

Android客户端正在使用Jackson将json映射到pojo,反之亦然。 pojo的种族看起来像这样:

private String[] ethnicities;
public String[] getEthnicities() {return ethnicities;}
public void setEthnicities(String[] ethnicities) {this.ethnicities = ethnicities;}

映射到json:

try {
    ObjectMapper mapper = new ObjectMapper();
    jsonUserObject = mapper.writeValueAsString(user);
} catch (IOException e) {
    System.out.println("IOException converting user object to JSON");
}

和json的映射:

try {
    ObjectMapper mapper = new ObjectMapper();
    user = mapper.readValue(userObjectJSON, User.class);
} catch (IOException e) {
    System.out.println("IOException converting JSON to user object");
}

以下是传入json的一些示例:

"ethnicities": [
      "Asian",
      "American Indian",
      "Hispanic"
    ]

"ethnicities": [
  "Caucasian"
]

"ethnicities": null

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试将此标记设置为ObjectMapper

mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

答案 1 :(得分:0)

您要处理的是整个JSON吗?

我今天也面临着类似的问题。看来,当要序列化的属性是JSON根属性时,不可能将JSON-Array反序列化为Java String []或List。

最后,我将值包装在另一个对象中。在您的情况下,可能看起来像这样:

"user": {
  "ethnicities": [
    "Asian",
    "American Indian",
    "Hispanic",
  ]
}

也许这只是一个配置问题-但我不知道如何在不包装阵列的情况下进行处理。

希望,这会有所帮助。 丹尼尔