9

पर मॉडल-स्कीमा कैप्चर तत्व अतिरिक्त बनाएं, मैं एक आरईएसटी एपीआई के लिए एडाप्टर कर रहा हूं। मैंने पोस्ट और पुट विधि के शरीर के लिए मॉडल स्कीमा का उपयोग किया है। एडाप्टर पर @RequestBody Model1 requestBodyएक सरणी क्षेत्र अनुरोध

अब, मुझे body फ़ील्ड के साथ सामना करना पड़ा जिसके लिए सरणी की आवश्यकता है।

स्वैगर यूआई शरीर इनपुट

समय 1) स्वैगर लोड होने पर, मॉडल द्वारा आरंभ किया गया:

{ 
    "field1"   : "", 
    "field2Optional" : "", 
    "fieldArray"  : [ 
     { "field2a"     : "input2a" } 
    ] 

} 

समय 2) उपयोगकर्ता से संपादित:

{ 
    "field1"   : "input1", 
    "field2Optional" : "", 
    "fieldArray"  : [ 
     { "field2"  : "input2a" }, 
     { "field2"  : "input2b-userAddition " } 
    ] 
} 

Model1.groovy

@XmlElement 
String field1 = '' 

@XmlElement 
String fieldOptional = '' 

@XmlElement 
ArrayList<Model2> fieldArray = new ArrayList<>(Arrays.asList(new Model2())).get(0) 

} 

Model2.groovy

@XmlElement 
String field2 = '' 

मैं Model1 कब्जा/तत्वों उपयोगकर्ता की तरह, { "field2" : "input2b-userAddition " }fieldArray को जोड़ा गया सहेजना चाहते हैं। वर्तमान कोड के साथ, मैं केवल सरणी get(0) का पहला तत्व प्राप्त कर सकता हूं, मैं मॉडल 2 के कई उदाहरण नहीं बनाना चाहता जब तक उपयोगकर्ता ने ऐसा नहीं कहा।

मेरे मन में जो समाधान है, वह पूरे शरीर के अनुरोध को प्राप्त करने और मॉडल के वास्तविक उपयोगकर्ता इनपुट की तुलना करने के लिए मॉडल 1.groovy के अंदर @RequestBody Map requestBody का उपयोग करना है। फिर मॉडल में नहीं मिले फ़ील्ड जोड़ें लेकिन वास्तविक उपयोगकर्ता इनपुट में पाए जाते हैं। मुझे आश्चर्य है कि ऐसा करने का एक बेहतर तरीका है?

उत्तर

0

पूरे शरीर के अनुरोध को प्राप्त करने के लिए @RequestBody Map requestBodyका उपयोग करके और मॉडल के वास्तविक उपयोगकर्ता इनपुट की तुलना करने के लिए मुझे एक बहुत अच्छा और साफ विचार लगता है। मेरा मानना ​​है कि एक बेहतर तरीका नहीं हो सकता है।

संबंधित मुद्दे