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 Framework для остальных услуг.
{
[{
"id": "1",
"name": "employee name1",
"company": "ABC Company"
}, {
"id": "2",
"name": "employee name2",
"company": "XYZ Company"
}]
}
Мы используем по умолчанию cxf JsonProvider (Jettison)
Пожалуйста, предложите любое решение. Заранее спасибо.
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>