Jackson ObjectMapper 反序列化包含对象数组的对象
Posted
技术标签:
【中文标题】Jackson ObjectMapper 反序列化包含对象数组的对象【英文标题】:Jackson ObjectMapper deserialize an object which contains an array of objects 【发布时间】: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 个二传手。很抱歉 【参考方案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;
【讨论】:
以上是关于Jackson ObjectMapper 反序列化包含对象数组的对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 com.fasterxml.jackson.databind.ObjectMapper 在序列化/反序列化 JSON 内容期间从异常日志中删除敏感数据
理解异常的麻烦:“无法从 START_OBJECT 令牌中反序列化 `java.lang.String` 的实例”在 Jackson 中使用 ObjectMapper
Jackson ObjectMapper 无法反序列化 POJO,抛出异常:没有找到适合类型 [...] 的构造函数:无法从 JSON 对象实例化