避免从输入/输出JSON(CXF Web服务)中包装对象类型名称

避免从输入/输出JSON(CXF Web服务)中包装对象类型名称,json,cxf,Json,Cxf,我有一个类似以下内容的CXF Web服务: @Service("MyWebService") public class MyWebService implements IMyWebService { @Autowired private IMyService MyService; public ResponseObject doSomething(RequestObject requestObject) { ResponseObject resp

我有一个类似以下内容的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;
    }
}
{ "requestObject" : { "amount" : 12.50, "userName" : "abcd123" } }
{ "responseObject" : { "success" : "true", "errorCode" : 0 } }
如果需要输入JSON,可以这样说:

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

    public ResponseObject doSomething(RequestObject requestObject) {
        ResponseObject responseObject = new ResponseObject;     
        .
        // do something....
        .
        .        
        return responseObject;
    }
}
{ "requestObject" : { "amount" : 12.50, "userName" : "abcd123" } }
{ "responseObject" : { "success" : "true", "errorCode" : 0 } }
并生成类似以下内容的输出JSON:

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

    public ResponseObject doSomething(RequestObject requestObject) {
        ResponseObject responseObject = new ResponseObject;     
        .
        // do something....
        .
        .        
        return responseObject;
    }
}
{ "requestObject" : { "amount" : 12.50, "userName" : "abcd123" } }
{ "responseObject" : { "success" : "true", "errorCode" : 0 } }
有没有办法配置CXF,使其接受以下格式的输入JSON:

{ "amount" : 12.50, "userName" : "abcd123" }
我需要去掉输入和输出JSON中的对象类型名称'requestObject'/'responseObject'。这可能吗


谢谢你的帮助

如果您是通过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提供程序删除根元素。有关更多配置和理解,请参阅此部分。

如果您使用的是maven,JSONProvider类如下:

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

org.apache.cxf
cxf rt rs扩展提供程序
2.7.5
您可能需要另一个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>


您的cxf版本是什么??你得到的所有错误是什么?我使用的是2.4.6,我没有得到错误。我不需要{“requestObject”:{“amount”:12.50,“userName”:“abcd123”}中的包装名称,而是需要服务接受JSON输入,而不需要{“amount”:12.50,“userName”:“abcd123”}中的包装名称。实际上,RESTEasy做到了这一点。每个框架都做到了,我使用的是cxf 2.6.0。我不知道2.4.6是否有这种配置。。查看我在回答中发布的链接,其中包含相关信息。。另外,请确保您正确配置了json提供程序。我为org.apache.cxf.jaxrs.provider.json.JSONProvider获得了ClassNotFoundException。甚至在JarFinder.com.Oh上也找不到,这是因为该软件包是在2.6版本中引入的,您应该使用org.apache.cxf.jaxrs.provider.JSONProvider