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

Posted

技术标签:

【中文标题】无法从 VALUE_STRING 令牌中反序列化 java.lang.String[] 的实例【英文标题】:Can not deserialize instance of java.lang.String[] out of VALUE_STRING token 【发布时间】:2017-08-25 05:05:16 【问题描述】:

无法从 VALUE_STRING 令牌 [...] 中反序列化 java.lang.String[] 的实例(通过引用链:[...].model.User["ethnicities"])

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

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

我做错了吗?

另外,我无法弄清楚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

谢谢!

【问题讨论】:

【参考方案1】:

尝试将此标志设置为ObjectMapper

mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

【讨论】:

不,我已经看到并尝试过,但没有成功。虽然我没有DeserializationFeature,但我通过DeserializationConfig.Feature 访问它,它并不能防止错误。【参考方案2】:

这是您处理的整个 JSON 吗?

我今天也遇到了类似的问题。当要序列化的属性是 JSON 根属性时,似乎无法将 JSON-Array 反序列化为 Java String[] 或 List。

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

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

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

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

【讨论】:

以上是关于无法从 VALUE_STRING 令牌中反序列化 java.lang.String[] 的实例的主要内容,如果未能解决你的问题,请参考以下文章

无法从 START_ARRAY 令牌中反序列化 Object 的实例

无法从 START_OBJECT 令牌中反序列化 `java.lang.Boolean` 的实例

Json 映射异常无法从 START_ARRAY 令牌中反序列化实例

无法读取文档:无法从 START_OBJECT 令牌中反序列化 java.lang.String 的实例

无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例

无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例