WSO2 КАК настроить JSON провайдера
У меня есть веб-приложение JAX-RS, созданное wso2 Studio. В моем приложении я получаю ответ JSON. Поставщик JSON должен быть включен в библиотеку cfx. Из документации cfx я прочитал, что могу персонализировать моего провайдера для удаления RootElement из моего вывода JSON.
Следуйте документации, я добавляю этот bean-компонент в cfx-servelt.xml
<bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="dropRootElement" value="true"/>
<property name="dropCollectionWrapperElement" value="true"/>
<property name="serializeAsArray" value="true"/>
<property name="supportUnwrapped" value="true"/>
</bean>
К сожалению, rootElement не был удален, и никаких ошибок не возникает. Где ошибка?
Спасибо!
1 ответ
Я использую WSO2 Developer Studio 3.8.0 и WSO2 AS 5.2.1. Это мой cxf-servlet.xml, и он работает как положено:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
<bean id="MyServiceBean" class="my.service.class"/>
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="dropRootElement" value="true"/>
<property name="supportUnwrapped" value="true"/>
</bean>
<jaxrs:server id="MyService" address="/myServiceURL">
<jaxrs:serviceBeans>
<ref bean="MyServiceBean"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jsonProvider" />
</jaxrs:providers>
</jaxrs:server>
</beans>
У меня есть следующий метод API и тип возвращаемого значения:
@GET
@Path("/checkEmail/{username}")
@Produces("application/json")
public CheckEmailResponse checkEmail(@PathParam("username") String username) throws Exception {
}
@XmlRootElement
public class CheckEmailResponse {
public boolean exists;
public boolean success;
}
И, как и ожидалось, возвращенный JSON распаковывается:
{"exists":true,"success":true}
То же самое для любого входного параметра JSON, например:
{
"username": "user",
"serviceProvider": "sp"
}
Я думаю, что свойство dropRootElement управляет возвращаемыми параметрами, а свойство supportUnwrapped управляет входными параметрами.