2012-05-23 44 views
6

我有一个CXF Web服务是这样的:避免包装从输入/输出JSON(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,使其ACC方式EPTS按以下格式输入JSON:

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

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

您的帮助表示感谢!

回答

1

如果你通过spring 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 Support

+0

是否尝试过这一点。这似乎并不奏效。 –

+0

什么是你的cxf版本?以及你所得到的所有错误? – Sikorski

+0

我正在使用2.4.6,我没有得到错误。我只是不需要在{“requestObject”:{“amount”:12.50,“userName”:“abcd123”}}中的包装名称}而是我需要该服务接受没有包装名称的JSON输入,如{“amount” :12.50,“userName”:“abcd123”}。其实RESTEasy就是这么做的。 –

5

如果您正在使用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>