2012-05-23 8 views
6

मैं इस तरह एक CXF वेब सेवा कुछ है लपेटकर:,बचें इनपुट/आउटपुट JSON (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; 
    } 
} 

कि एक इनपुट JSON उम्मीद कुछ इस तरह कहते हैं:

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

और इस तरह एक निर्गम JSON कुछ पैदा करता है:

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

वहाँ CXF कॉन्फ़िगर करने के लिए इस तरह के यह एसीसी कि एक रास्ता है epts इनपुट निम्न स्वरूप में JSON:

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

मैं इनपुट और आउटपुट JSON में ऑब्जेक्ट प्रकार का नाम 'requestObject'/'responseObject' को निकाल देते हैं की जरूरत है। क्या यह भी संभव है?

आपकी मदद की सराहना की!

उत्तर

1

यदि आप स्प्रिंग्स xml कॉन्फ़िगरेशन फ़ाइल (जैसे applicationContext.xml) के माध्यम से जेसन प्रदाता को कॉन्फ़िगर कर रहे हैं, तो बस नीचे कॉन्फ़िगरेशन जोड़ें जो यह काम करेगा।

<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 Support का संदर्भ लें।

+0

इस की कोशिश की है। यह काम नहीं लग रहा है। –

+0

आपका सीएक्सएफ संस्करण क्या है ?? और आप क्या त्रुटियां प्राप्त कर रहे हैं? – Sikorski

+0

मैं 2.4.6 का उपयोग कर रहा हूं, और मुझे त्रुटियां नहीं मिल रही हैं। मुझे सिर्फ {"requestObject" के रूप में रैपर नाम की आवश्यकता नहीं है: {"राशि": 12.50, "उपयोगकर्ता नाम": "abcd123"}} इसके बजाय मुझे जेएसओएन इनपुट को रैपर नाम के बिना स्वीकार करने की आवश्यकता है जैसे कि "राशि" : 12.50, "उपयोगकर्ता नाम": "abcd123"}। असल में रीस्टेसी ऐसा करता है। –

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> 
संबंधित मुद्दे