gpt4 book ai didi

java - 使用 Jackson 处理 Ember JSON API 请求

转载 作者:行者123 更新时间:2023-12-01 22:42:53 24 4
gpt4 key购买 nike

我正在使用 Ember 构建客户端应用程序,后端是一个 Java Servlet,使用 Jackson处理调用。

来自 ember 的创建客户调用如下所示:

{  
"customer":{
"name":"4545",
"email":"454545",
"authenticator":"facebook"
}
}

对于这种格式的 JSON 数据,我无法使用 Jackson 的简单解决方案

mapper.readValue(jsonData, Customer.class); 

由于客户字段不在 JSON 数据的第一级中。我必须处理 JSON 数据才能获取客户字段,并按如下方式实现:

JsonNode rootNode = mapper.readTree(jsonData);
Iterator iterator = rootNode.fields();
Entry first = (Entry) iterator.next();
ObjectNode node = (ObjectNode) first.getValue();
mapper.readValue(node.toString(), Customer.class);

但我正在寻找一种更好的方法来做到这一点,或者是 Jackson 提供的开箱即用的方法。有什么建议吗?

最佳答案

尝试忽略第一级数据以忽略customer字段并使用 DeserializationConfig.UNWRAP_ROOT_VALUE 处理内部数据属性(此功能包含在 1.9.0 及更高版本中):

Feature to allow "unwrapping" root-level JSON value, to match setting of SerializationConfig.Feature.WRAP_ROOT_VALUE used for serialization. Will verify that the root JSON value is a JSON Object, and that it has a single property with expected root name. If not, a JsonMappingException is thrown; otherwise value of the wrapped property will be deserialized as if it was the root value.

这将仅包含一条用于配置映射器的附加说明:

mapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
try
{
Customer customer = mapper.readValue(jsonData, Customer.class);
}
catch (IOException ioe)
{
//...
}

您可能还需要添加模型类的根元素名称(如果尚未添加),以便 Jackson 可以在反序列化时将其与 JSON 提要中的根级别名称进行匹配:

@JsonRootName("customer")
public class Customer {
//...
}

关于java - 使用 Jackson 处理 Ember JSON API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835052/

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