2012-05-23 8 views
6

Tengo algo servicio web CXF así:Evitar envolviendo el nombre del tipo de objeto a partir de la entrada/salida JSON (servicio Web CXF)

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

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

que espera un JSON de entrada, decir algo como esto:

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

y produce una salida JSON algo como esto:

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

¿hay una manera de configurar CXF tal que acc EPT la entrada JSON en el siguiente formato:

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

Necesito pelar hacia fuera el nombre del tipo de objeto 'requestObject'/'responseObject' en la entrada y salida JSON. ¿Es eso posible?

¡Su ayuda apreciada!

Respuesta

1

Si está configurando el proveedor json a través del archivo de configuración de muelles xml (como applicationContext.xml), simplemente agregue la siguiente configuración, funcionará.

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

El dropRootElement le dice al proveedor json que suelte el elemento raíz. Consulte este JSON Support para más configuración y comprensión.

+0

han probado este. Parece que esto no funciona. –

+0

¿Cuál es su versión cxf? y ¿qué todos los errores que estás obteniendo? – Sikorski

+0

Estoy usando 2.4.6, y no recibo errores. Simplemente no necesito el nombre del contenedor como en {"requestObject": {"amount": 12.50, "userName": "abcd123"}} en cambio, necesito que el servicio acepte la entrada JSON sin el nombre del contenedor como en {"amount" : 12.50, "nombre de usuario": "abcd123"}. En realidad, RESTE hace eso. –

5

Si está utilizando Maven, la clase JSONProvider está aquí:

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

Es posible que necesite otro propiedades del proveedor de JSON para lograr sus objetivos:

<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> 
Cuestiones relacionadas