【发布时间】:2021-09-02 09:12:06
【问题描述】:
我将客户端设置为后端(不幸的是我无法更改它)并发送如下结构:
{
"code":"Success",
"structure": {
"sth":"sth"
}
}
但当代码为 Error 时,它会返回:
{
"code":"Error",
"structure":[]
}
因为这个数组很难反序列化。我是这样尝试的:
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
class Structure {
private String code;
private Sth structure;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@JsonIgnoreType
class Sth{
private String sth;
}
但是JsonIgnoreType 总是忽略Sth 不仅在它是不兼容类型的情况下......
你有什么想法吗?
#编辑
错误信息:
2021-09-02 11:56:28.623 DEBUG [http-nio-8021-exec-2] [package]: [function] com.fasterxml.jackson.databind.exc.MismatchedInputException: 无法反序列化 @987654327 的实例@ out of START_ARRAY 令牌 在 [来源:(BufferedReader);行:1,列:113](通过引用链:结构[“结构”])
【问题讨论】:
-
Error是否包含字符串、数字或Sth的数组? -
似乎
structure在一个响应中是一个对象,而在另一个响应中是一个数组。我不确定杰克逊是否可以选择处理这个问题,这是一个非常糟糕的 API。您也许可以尝试使用自定义反序列化器,并将structure设为Object,这就是我会尝试的。 -
不完全是这个 JSON 代码来自我看到的一个肮脏的后端......这可能会从相同的 enpoint json 或 html 发送给你,这取决于它想要什么......