1

我有一个由 wso2 Studio 创建的 JAX-RS Web 应用程序。在我的应用程序中,我生成了一个 json 响应。JSON 提供程序应包含在 cfx 库中。从 cfx 文档中,我了解到我可以个性化我的提供程序以从我的 JSON 输出中删除 RootElement。

按照我在 cfx-servelt.xml 中添加这个 bean 的文档

<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 没有被删除,也没有产生错误。错在哪里?

谢谢!

4

1 回答 1

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 属性管理输入参数。

于 2016-02-03T16:45:08.083 回答