我正在与第三方 API 集成,该 API 使用如下对象进行响应:
{
"name": {
"firstName": "John",
"lastName": "Doe"
}
}
对应的Java类如下所示:
class Name {
private String firstName;
private String lastName;
}
问题:当名称应为 null
时,API 返回空字符串,而不是 null
或空对象:
{
"name": ""
}
疑问:如何在客户端容忍这种行为,同时记住我使用 Spring 的 RestTemplate
和 Jackson
调用 API?
换句话说,我如何告诉 Jackson 将传入 name
属性的空字符串视为 null,或者视为具有 null 属性的类 Name
的对象?
注意:API 无法正常工作。我必须亲自处理。
最佳答案
您可以使用try/catch
并处理错误。或者,如果您必须处理不同的场景,您可以编写自己的反序列化器。
尝试捕捉
Name name;
try {
// Your restTemplate code, will throw Exception when cannot serialize
} catch (Execption e) {
name = null;
}
如何反序列化的示例(未测试)
// On your class specify Deserialzer
@JsonDeserialize(using = YourNameClassDeserializer.class)
public class YourNameClass {
// your class here
}
// Your Deserializer class
public class YourNameClassDeserializer extends StdDeserializer<Item> {
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
// Use JsonNode to figure out what you are getting and create the object by yourself
return new YourNameClass(firstName, lastName);
}
}
您可以选择其中一种解决方案,两者都适合您的情况。
关于java - Jackson 如何容忍 json 中错误的参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58129520/