2012-05-23 9 views
6

Ho un qualcosa di CXF Web Service come questo:Evitare di avvolgere il nome tipo di oggetto da input/output JSON (CXF Web Service)

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

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

che prevede un ingresso JSON, dire qualcosa di simile:

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

e produce un output JSON o meno così:

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

c'è un modo per configurare CXF tale che acc EPT l'ingresso JSON nel seguente formato:

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

devo per togliere il nome del tipo oggetto 'requestObject'/'responseObject' in ingresso e in uscita JSON. È possibile?

Il vostro aiuto apprezzato!

risposta

1

Se si configura il provider json tramite il file di configurazione molle xml (come applicationContext.xml), è sufficiente aggiungere la configurazione di seguito che funzionerà.

<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 indica al provider json di eliminare l'elemento radice. Fare riferimento a questo JSON Support per una maggiore configurazione e comprensione.

+0

provato questo. Questo non sembra funzionare. –

+0

qual è la tua versione cxf ?? e quali sono tutti gli errori che stai ricevendo? – Sikorski

+0

Sto usando 2.4.6, e non ottengo errori. Non ho proprio bisogno del nome del wrapper come in {"requestObject": {"amount": 12.50, "userName": "abcd123"}} invece ho bisogno che il servizio accetti l'input JSON senza il nome del wrapper come in {"amount" : 12.50, "userName": "abcd123"}. In realtà RESTEasy lo fa. –

5

Se si utilizza Maven, la classe JSONProvider è qui:

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

Potrebbe essere necessario un altro proprietà del provider JSON per raggiungere i vostri obiettivi:

<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> 
Problemi correlati