2012-05-23 36 views
6

Tôi có một cái gì đó CXF Web Service như thế này:Tránh bao tên loại đối tượng từ đầu vào/đầu ra JSON (Web Service 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; 
    } 
} 

rằng hy vọng một đầu vào JSON, nói điều gì đó như thế này:

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

và tạo ra một đầu ra JSON một cái gì đó như thế này:

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

có cách nào để cấu hình CXF như vậy mà nó acc tạo JSON đầu vào theo định dạng sau:

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

Tôi cần loại bỏ tên loại đối tượng 'requestObject'/'responseObject' trong đầu vào và đầu ra JSON. Điều đó thậm chí có thể?

Trợ giúp của bạn được đánh giá cao!

Trả lời

1

Nếu bạn định cấu hình nhà cung cấp dịch vụ json thông qua tệp cấu hình lò xo xml (như applicationContext.xml), thì chỉ cần thêm cấu hình bên dưới nó sẽ hoạt động.

<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 yêu cầu nhà cung cấp dịch vụ json thả phần tử gốc. Tham khảo JSON Support này để biết thêm cấu hình và sự hiểu biết.

+0

đã thử này. Điều này dường như không hoạt động. –

+0

Phiên bản cxf của bạn là gì ?? và tất cả các lỗi mà bạn đang nhận được là gì? – Sikorski

+0

Tôi đang sử dụng 2.4.6 và tôi không nhận được lỗi. Tôi chỉ không cần tên wrapper như trong {"requestObject": {"amount": 12.50, "userName": "abcd123"}} thay vào đó tôi cần dịch vụ để chấp nhận đầu vào JSON mà không có tên trình bao bọc như trong {"số tiền" : 12,50, "tên người dùng": "abcd123"}. Trên thực tế RESTEasy làm điều đó. –

5

Nếu bạn đang sử dụng maven, lớp JSONProvider là ở đây:

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

Bạn có thể cần một nhà cung cấp json tính để đạt được mục tiêu của mình:

<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> 
Các vấn đề liên quan