【问题标题】:Jackson ObjectMapper deserialize an object which contains an array of objectsJackson ObjectMapper 反序列化包含对象数组的对象
【发布时间】:2021-10-05 12:01:25
【问题描述】:

我序列化这种对象:

public class MyObject implements Serializable {

private String type;
...
private String[] target;

//getters and setters
}

但是当我尝试反序列化 MyObject 时,由于 target 数组而出现错误。

java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: java.util.ArrayList[0]->MyObject["target"])
...

如何反序列化一个数组?

【问题讨论】:

  • 杰克逊似乎试图反序列化一个字符串,而不是一个字符串数组。可能是setter方法出错了?
  • 向我们展示你的 json,也许那里有错误。
  • 感谢你们的帮助,我没有看到我有 2 个二传手。很抱歉

标签: java spring-boot jackson objectmapper


【解决方案1】:

我终于找到了问题所在。我没有看到班上有 2 个二传手。杰克逊可能用错了。

我只需将注释 @JsonSetter("target") 放在接受数组的 setter 上方,以告诉 Jackson 使用好的数组。

public void setTarget(String target) {
    this.target = new String[]{target};
}

@JsonSetter("target")
public void setTarget(String[] target) {
    this.target = target;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多