【发布时间】:2019-05-23 21:37:43
【问题描述】:
我正在尝试为我们公司使用 Spring 与他们的 API 交互的软件创建一个包装器。
目前,该软件的 API 返回一个平面 JSON 对象作为GET 请求的响应。我面临的问题取决于我们从中获取的某个字段中是否有数据将确定响应中的值是字符串还是 JSON 对象。
在 Spring 中创建模型时如何处理这种动态数据类型?
当只是处理数据时,如果该特定字段的数据为空,并且我在模型中将数据类型设置为 String,我可以将其反序列化为我的 result 对象。
当有此特定字段的数据时,反之亦然。我创建了一个名为 LinkValueObject 的自定义对象,它只包含两个属性 link 和 value。当我在该字段有数据时发出请求时,我再次能够正确反序列化它。我只是不确定如何动态处理这两种情况。
如果我弄错了术语,我深表歉意。
“assigned_to”中没有数据的响应示例:
{
"result": {
"name": "Bob Ross",
"assigned_to": ""
}
}
“assigned_to”中包含数据的响应示例:
{
"result": {
"name": "Bob Ross",
"assigned_to": {
"link": "https://mylink.com",
"value": "qwerty123456"
}
}
}
我现在的模型如下所示:
// Using Lombok to auto-generate getters/setters
@Data
@NoArgsConstructor
@JsonInclude("JsonInclude.Include.NON_NULL")
public class Result {
@JsonProperty("name")
private String name;
// This will handle if assigned_to returned as a JSON object
// If assigned_to was empty, it would return as an empty string
// and cause this to bomb out until the Data type was String again
@JsonProperty("assigned_to")
private LinkValueObject assignedTo;
}
【问题讨论】: