当前位置: 首页 > 知识库问答 >
问题:

不能反序列化实例的java.lang.字符串[]出VALUE_STRING令牌

赵修诚
2023-03-14

无法反序列化java实例。lang.String[]值外\u字符串标记[…](通过参考链:[……])。模型用户[“种族”])

我有一个用户对象的属性种族

从这里我可以看出,错误是因为json“type”与属性类型不匹配,但在我的例子中,两者都是字符串数组。

我做错什么了吗?

此外,我无法理解VALUE\u STRING在解析中代表什么。

服务器端正在使用环回,并且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个答案

益楷
2023-03-14

这就是你处理的全部JSON吗?

我今天也遇到了类似的问题。当要序列化的属性是JSON根属性时,似乎不可能将JSON数组反序列化为Java字符串[]或列表。

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

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

也许这只是一个配置问题——但是我不知道如何在不包装数组的情况下处理它。

希望能有帮助。丹尼尔

吴哲
2023-03-14

尝试将此标志设置为ObjectMapper

mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
 类似资料: