我有使用JAX-RS由CXF创建的以下响应:
{"ns1.CustomerInformationResponse":{ "@xsi.type":"ns1:CustomerInformationResponse","ns2.code":"SUCCESS","ns1.customer":{ "@xsi.type":"ns2:CustomerBaseDTO","ns2.login":"login1" } }}
这是我当前上下文配置的相关部分:
<jaxrs:server address="http://${host}:${port}/rest/customer"> <jaxrs:serviceBeans> <ref bean="customerManagementServiceImpl" /> </jaxrs:serviceBeans> <jaxrs:providers> <bean class="org.apache.cxf.jaxrs.provider.AegisJSONProvider" /> </jaxrs:providers> </jaxrs:server>
我想收到类似上面的响应,没有名称空间前缀(即ns1,ns2等…).
我试图将org.apache.cxf.interceptor.transform.TransformOutInterceptor添加到cxf:outInterceptors,但它没有帮助.
解决方法
在您的beans.xml中,您可以像下面那样指定bean jsonProvider.
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.AegisJSONProvider"> <property name="ignoreNamespaces" value="true" /> </bean>
现在在Context Configuration中调用jsonProvider,如下所示
<jaxrs:server address="http://${host}:${port}/rest/customer"> <jaxrs:serviceBeans> <ref bean="customerManagementServiceImpl" /> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean ="jsonProvider" /> </jaxrs:providers> </jaxrs:server>