【问题标题】:How to remove namespace prefixes from JSON response in CXF/JAX-RS?如何从 CXF/JAX-RS 中的 JSON 响应中删除命名空间前缀?
【发布时间】:2012-10-11 11:57:36
【问题描述】:

CXF 使用 JAX-RS 创建了以下响应:

{"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,但没有帮助。

【问题讨论】:

    标签: java cxf jax-rs cxfrs


    【解决方案1】:

    在您的 beans.xml 中,您可以像下面这样指定 bean jsonProvider。

    <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.AegisJSONProvider">
    <property name="ignoreNamespaces" value="true" />
    </bean>
    

    现在在上下文配置中调用 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>
    

    【讨论】:

    • 此外,您可以使用attributesToElements 属性删除为从XML 属性创建的JSON 属性添加的@ 字符。
    • 我认为我在网上搜索了几个小时后找到了最好的解决方案。谢谢大家。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多