2012-05-23 67 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>