JAX-RS — JSON без корневого узла в apache CXF

Если мы вернем объект коллекции в ответе 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
  }

Мне не нужен узел корневого элемента объекта Collection в ответе JSON. Вывод должен быть в следующем формате. Я использую платформу Apache CXF для остальных служб.

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

}

Мы используем cxf JsonProvider по умолчанию (Jettison)

Пожалуйста, предложите любое решение. Заранее спасибо.


person user3065600    schedule 04.12.2013    source источник
comment
Можете ли вы добавить код. Какую реализацию вы используете Джексон или Джеттисон?   -  person Karthik Prasad    schedule 04.12.2013
comment
Мы используем cxf JsonProvider (Jettison) по умолчанию. У нас есть документ, и мы предоставляем более подробную информацию, пожалуйста, изучите его. Спасибо КаПра.   -  person user3065600    schedule 05.12.2013
comment
Я не думаю, что это возможно, потому что вывод, который вы пытаетесь сгенерировать, не является допустимым json.   -  person Sebastien    schedule 16.07.2014


Ответы (1)


Вы можете настроить использование свойства элемента droproot, настроив provider

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

Вы также можете настроить с помощью пользовательского JAXBElement, пожалуйста, проверьте здесь

Пример

<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> 
person Karthik Prasad    schedule 05.12.2013