gpt4 book ai didi

java - Jackson 如何容忍 json 中错误的参数类型?

转载 作者:行者123 更新时间:2023-12-02 09:28:55 25 4
gpt4 key购买 nike

我正在与第三方 API 集成,该 API 使用如下对象进行响应:

{
"name": {
"firstName": "John",
"lastName": "Doe"
}
}

对应的Java类如下所示:

class Name {
private String firstName;
private String lastName;
}

问题:当名称应为 null 时,API 返回空字符串,而不是 null 或空对象:

{
"name": ""
}

疑问:如何在客户端容忍这种行为,同时记住我使用 Spring 的 RestTemplateJackson 调用 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;
}

解串器文档: https://fasterxml.github.io/jackson-databind/javadoc/2.3.0/com/fasterxml/jackson/databind/JsonDeserializer.html

如何反序列化的示例(未测试)

// 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com