ClientResponse (org.springframework.web.reactive.function.client.ClientResponse) WebClient का उपयोग करते समय कक्षाओं में असंगतता दिखाना
मैंने बाकी सेवाओं को कॉल करने के लिए WebClient (org.springframework.web.reactive.function.client.WebClient) का उपयोग करना शुरू कर दिया है। मैं 2 वर्गों का कहना है कि उपयोगिता। जावा और ServiceImpl.java। ServiceImpl.java वह जगह है जहां मैं WebClient का उपयोग करता हूं। एक पोस्ट कॉल मैं कर रहा हूँ जैसा दिखता है -
ClientResponse response = webClient.post()
.uri(path)
.body(Mono.just(inputDTO),InputDTO.class)
.exchange()
.block();
(ऊपर दिया गया क्लाइंटग्रैस org.springframework.web.reactive.function.client.ClientResponse है) (मैं एक्सचेंज के इंस्टा एक्सचेंज का उपयोग कर रहा हूं क्योंकि मुझे हेडर के साथ-साथ स्टेटस कोड भी चाहिए)
अब इस प्रतिक्रिया को कुछ DTO - ResponseDTO में बदलने की कोशिश कर रहा है।
Mono<ResponseEntity<ResponseDTO>> mono = response.toEntity(ResponseDTO.class);
ResponseEntity<ResponseDTO> resEntity = mono.block();
ResponseDTO myObj = resEntity.getBody();
तो myObj ResponseDTO वर्ग की एक वस्तु है।
मुद्दा यह है - जब मैं अपनी उपयोगिता वर्ग में 'प्रतिक्रिया में प्रतिक्रिया, उत्तर- जावा' का रूपांतरण करता हूं, तो मुझे myObj = null मिलता है। लेकिन अगर मैं इसे अपने ServiceImpl.java (बस पोस्ट एपीआई कॉल करने के बाद) में करता हूं, तो यह उचित निकाय (ResponseDTO ऑब्जेक्ट) लौटाता है। एक ही समस्या तब भी होती है जब मैं ServiceImpl.java में दो अलग-अलग तरीकों से रूपांतरण और पोस्ट कॉल ऑपरेशन करता हूं। क्या मुझे यहां कुछ कॉन्फ़िगर करने की आवश्यकता है?
जवाब
मुझे पता लगा कि मुद्दा क्या था। REST एपि को कॉल करने के बाद, प्रतिक्रिया में शरीर अगर मैं पहली बार प्रतिक्रिया से इसे पढ़ने के बाद फ्लश करता हूं। मेरे पास सेवा कार्यान्वयन वर्ग में एक Sysout स्टेटमेंट था जहां मैं शरीर की सामग्री पढ़ रहा था।
सिफारिश: शरीर की सामग्री को केवल एक बार पढ़ें और इसे एक चर में संग्रहीत करें। जहाँ आवश्यकता हो वहाँ इसका प्रयोग करें।