ClientResponse (org.springframework.web.reactive.function.client.ClientResponse) แสดงความไม่สอดคล้องกันระหว่างคลาสขณะใช้ WebClient

Sep 11 2020

ฉันได้เริ่มใช้ WebClient (org.springframework.web.reactive.function.client.WebClient) เพื่อเรียกบริการส่วนที่เหลือ ฉันมี 2 คลาสพูดว่า Utility.java และ ServiceImpl.java ServiceImpl.java เป็นที่ที่ฉันใช้ WebClient โพสต์โทรที่ฉันทำดูเหมือน -

ClientResponse response = webClient.post()
            .uri(path)
            .body(Mono.just(inputDTO),InputDTO.class)
            .exchange()
            .block();

(ClientResponse ด้านบนคือ org.springframework.web.reactive.function.client.ClientResponse) (ฉันใช้ exchange instaed ของ retrive เพราะฉันต้องการส่วนหัวและรหัสสถานะ)

ตอนนี้กำลังพยายามแปลงคำตอบนี้เป็น DTO - ResponseDTO

Mono<ResponseEntity<ResponseDTO>> mono = response.toEntity(ResponseDTO.class);
        ResponseEntity<ResponseDTO> resEntity = mono.block();
        ResponseDTO myObj = resEntity.getBody();

ดังนั้น myObj จึงเป็นอ็อบเจ็กต์ของคลาส ResponseDTO

ปัญหาคือ - เมื่อฉันทำการแปลง 'response เป็น ResponseDTO.java' ในคลาสยูทิลิตี้ของฉันฉันจะได้ myObj = null แต่ถ้าฉันทำใน ServiceImpl.java ของฉัน (หลังจากเรียกโพสต์ API) มันจะส่งคืนเนื้อความที่เหมาะสม (วัตถุ ResponseDTO) ปัญหาเดียวกันนี้เกิดขึ้นแม้ว่าฉันจะทำการแปลงและดำเนินการหลังการโทรด้วยสองวิธีที่แตกต่างกันใน ServiceImpl.java ฉันต้องกำหนดค่าบางอย่างที่นี่หรือไม่?

คำตอบ

RushikeshMandage Sep 14 2020 at 07:34

ฉันพบว่าปัญหาคืออะไร หลังจากเรียก REST api แล้วเนื้อหาในการตอบสนองจะถูกล้างออกหลังจากที่ฉันอ่านมันจากการตอบสนองเป็นครั้งแรก ฉันมีคำสั่ง Sysout ในคลาสการใช้งานบริการซึ่งฉันกำลังอ่านเนื้อหาเนื้อหา

คำแนะนำ:อ่านเนื้อหาเนื้อหาเพียงครั้งเดียวและเก็บไว้ในตัวแปร ใช้ได้ทุกที่ที่ต้องการ