【问题标题】:JAX-RS - JSON without root node in apache CXFJAX-RS - apache CXF 中没有根节点的 JSON
【发布时间】:2013-12-04 11:58:04
【问题描述】:

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

 {
"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)

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

【问题讨论】:

  • 你能添加代码吗?您使用的是 Jackson 还是 Jettison 的哪个实现?
  • 我们使用默认的 cxf JsonProvider (Jettison)。我们有文档并提供更多详细信息,请查看它。谢谢 kaPra。
  • 我认为这是不可能的,因为您尝试生成的输出不是有效的 json。

标签: java json cxf jax-rs cxfrs


【解决方案1】:

您可以通过自定义 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> 

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多