6

我有一个类似这样的 CXF Web 服务:

@Service("MyWebService")
public class MyWebService implements IMyWebService {    
    @Autowired
    private IMyService MyService;

    public ResponseObject doSomething(RequestObject requestObject) {
        ResponseObject responseObject = new ResponseObject;     
        .
        // do something....
        .
        .        
        return responseObject;
    }
}

需要输入 JSON,这样说:

{ "requestObject" : { "amount" : 12.50, "userName" : "abcd123" } }

并生成如下输出 JSON:

{ "responseObject" : { "success" : "true", "errorCode" : 0 } }

有没有办法配置 CXF,使其接受以下格式的输入 JSON:

{ "amount" : 12.50, "userName" : "abcd123" }

我需要在输入和输出 JSON 中去掉对象类型名称“requestObject”/“responseObject”。这甚至可能吗?

感谢您的帮助!

4

2 回答 2

6

如果您使用的是 maven,则 JSONProvider 类在这里:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-extension-providers</artifactId>
    <version>2.7.5</version>
</dependency>

您可能需要另一个 json 提供程序属性来实现您的目标:

<jaxrs:providers>
     <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>
</jaxrs:providers>
于 2013-05-25T10:54:22.430 回答
1

如果您通过 springs xml 配置文件(如 applicationContext.xml)配置 json 提供程序,则只需添加以下配置即可。

<jaxrs:providers>
            <bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
                <property name="dropRootElement" value="true" />
                <property name="supportUnwrapped" value="true" />
            </bean>
</jaxrs:providers>

dropRootElement 告诉 json 提供者删除根元素。有关更多配置和理解,请参阅此JSON 支持

于 2012-05-30T13:31:23.960 回答