Java 使用Jackson处理Ember JSON API请求
我使用Ember构建客户机应用程序,后端是一个Javaservlet,用于处理调用 来自ember的创建客户呼叫如下所示:Java 使用Jackson处理Ember JSON API请求,java,json,ember.js,jackson,servlet-3.0,Java,Json,Ember.js,Jackson,Servlet 3.0,我使用Ember构建客户机应用程序,后端是一个Javaservlet,用于处理调用 来自ember的创建客户呼叫如下所示: { "customer":{ "name":"4545", "email":"454545", "authenticator":"facebook" } } JsonNode rootNode = mapper.readTree(jsonData); Iterator iterator = rootNode.fiel
{
"customer":{
"name":"4545",
"email":"454545",
"authenticator":"facebook"
}
}
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);
有了这种格式的JSON数据,我无法使用Jackson提供的简单解决方案
mapper.readValue(jsonData, Customer.class);
因为客户字段不在JSON数据的第一级。我必须处理JSON数据以获取客户字段,实现方式如下:
{
"customer":{
"name":"4545",
"email":"454545",
"authenticator":"facebook"
}
}
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);
但是我正在寻找一个更好的方法,或者从杰克逊那里得到一些现成的东西。有什么建议吗?尝试忽略第一级数据以忽略
客户
字段,并使用属性处理内部数据(此功能包含在1.9.0及更高版本中)):
允许“展开”根级别JSON值的功能,以匹配用于序列化的SerializationConfig.Feature.WRAP_root_值的设置。将验证根JSON值是否为JSON对象,以及它是否具有具有预期根名称的单个属性。如果不是,则抛出一个JsonMappingException;否则,包装属性的值将被反序列化,就像它是根值一样
这将只包括一条配置映射器的附加说明:
mapper.configure(SerializationConfig.Feature.UNWRAP\u ROOT\u值,true);
尝试
{
Customer=mapper.readValue(jsonData,Customer.class);
}
捕获(ioe异常ioe)
{
//...
}
如果尚未添加,您可能还需要添加模型类的根元素名称,以便Jackson在反序列化时将其与JSON提要中的根级别名称匹配:
@JsonRootName(“客户”)
公共类客户{
//...
}
尝试忽略第一级数据以忽略客户
字段,并使用属性处理内部数据(此功能包含在1.9.0及更高版本中)):
允许“展开”根级别JSON值的功能,以匹配用于序列化的SerializationConfig.Feature.WRAP_root_值的设置。将验证根JSON值是否为JSON对象,以及它是否具有具有预期根名称的单个属性。如果不是,则抛出一个JsonMappingException;否则,包装属性的值将被反序列化,就像它是根值一样
这将只包括一条配置映射器的附加说明:
mapper.configure(SerializationConfig.Feature.UNWRAP\u ROOT\u值,true);
尝试
{
Customer=mapper.readValue(jsonData,Customer.class);
}
捕获(ioe异常ioe)
{
//...
}
如果尚未添加,您可能还需要添加模型类的根元素名称,以便Jackson在反序列化时将其与JSON提要中的根级别名称匹配:
@JsonRootName(“客户”)
公共类客户{
//...
}
尝试忽略第一级数据以忽略客户
字段,并使用属性处理内部数据(此功能包含在1.9.0及更高版本中)):
允许“展开”根级别JSON值的功能,以匹配用于序列化的SerializationConfig.Feature.WRAP_root_值的设置。将验证根JSON值是否为JSON对象,以及它是否具有具有预期根名称的单个属性。如果不是,则抛出一个JsonMappingException;否则,包装属性的值将被反序列化,就像它是根值一样
这将只包括一条配置映射器的附加说明:
mapper.configure(SerializationConfig.Feature.UNWRAP\u ROOT\u值,true);
尝试
{
Customer=mapper.readValue(jsonData,Customer.class);
}
捕获(ioe异常ioe)
{
//...
}
如果尚未添加,您可能还需要添加模型类的根元素名称,以便Jackson在反序列化时将其与JSON提要中的根级别名称匹配:
@JsonRootName(“客户”)
公共类客户{
//...
}
尝试忽略第一级数据以忽略客户
字段,并使用属性处理内部数据(此功能包含在1.9.0及更高版本中)):
允许“展开”根级别JSON值的功能,以匹配用于序列化的SerializationConfig.Feature.WRAP_root_值的设置。将验证根JSON值是否为JSON对象,以及它是否具有具有预期根名称的单个属性。如果不是,则抛出一个JsonMappingException;否则,包装属性的值将被反序列化,就像它是根值一样
这将只包括一条配置映射器的附加说明:
mapper.configure(SerializationConfig.Feature.UNWRAP\u ROOT\u值,true);
尝试
{
Customer=mapper.readValue(jsonData,Customer.class);
}
捕获(ioe异常ioe)
{
//...
}
如果尚未添加,您可能还需要添加模型类的根元素名称,以便Jackson在反序列化时将其与JSON提要中的根级别名称匹配:
@JsonRootName(“客户”)
公共类客户{
//...
}
谢谢!还使用了mapper.configure(SerializationFeature.WRAP\u ROOT\u值,true);当然,你的序列化风格应该与反序列化风格相结合,但既然你在OP中没有解决这个问题,我就不想抓住主要问题。:)谢谢还使用了mapper.configure(SerializationFeature.WRAP\u ROOT\u值,true);当然,你的序列化风格应该与反序列化风格相结合,但既然你在OP中没有解决这个问题,我就不想抓住主要问题。:)谢谢还使用了mapper.configure(SerializationFeature.WRAP\u ROOT\u值,true);当然,你的序列化风格应该与反序列化风格相结合,但既然你在OP中没有解决这个问题,我就不想抓住主要问题。:)谢谢还使用了mapper.configure(SerializationFeature.WRAP\u ROOT\u值,true);瑞典伏特加