gpt4 book ai didi

java - JAX-RS - apache CXF 中没有根节点的 JSON

转载 作者:行者123 更新时间:2023-11-29 05:33:16 25 4
gpt4 key购买 nike

如果我们在 REST 响应中返回集合对象,则 JSON(它将根元素节点作为集合对象名称 - 在本例中为 employees)将采用以下格式:

 {
"employees": [{
"id": "1",
"name": "employee name1",
"company": "ABC Company"
}, {
"id": "2",
"name": "employee name2",
"company": "XYZ Company"
}]

这是我们在应用程序上下文中的 JsonProvider 配置的片段

 <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="dropRootElement" value="true" />
<property name="serializeAsArray" value="true" />
<property name="dropCollectionWrapperElement" value="true" />
</bean>

@XmlRootElement(name="emps")
public class EmpList{
private List<Emp> employees;
//setter and getter methods
}
@XmlRootElement(name="emp")
public class Emp{
private int id;
private Sting name;
private String company;
//setter and getter methods
}

我不想在 JSON 响应中使用 Collection 对象根元素节点。输出应采用以下格式。我正在使用 Apache CXF 框架来提供休息服务。

 {
[{
"id": "1",
"name": "employee name1",
"company": "ABC Company"
}, {
"id": "2",
"name": "employee name2",
"company": "XYZ Company"
}]

我们使用默认的 cxf JsonProvider (Jettison)

请提出任何解决方案。提前致谢。

最佳答案

您可以通过自定义 provider 使用 droproot 元素属性进行配置

<jaxrs:providers>
<bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="dropRootElement" value="true" />
</bean>
</jaxrs:providers>

您还可以使用自定义 JAXBElement 进行配置,请检查 here

例子

<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
<property name="outDropElements">
<list>
<!-- ignore drop and {http://numbers}number elements -->
<value>{http://numbers}number</value>
<value>index</value>
</list>
</property>
</bean>

关于java - JAX-RS - apache CXF 中没有根节点的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20374775/

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