1. การเรียงลำดับปัญหา:
ข้อยกเว้น: org.springframework.web.httprequestmethodnotsupportedexception: ไม่รองรับวิธีการขอ 'โพสต์'
เป็นที่ชัดเจนว่าเมื่อ Feign ดำเนินการตามคำขอ HTTP ในที่สุดวิธีนี้จะถือว่าเป็นโพสต์ แต่ไคลเอนต์ Feign กำหนด requestMethod.get หรือ @getMapping ซึ่งทำให้เกิดข้อผิดพลาด
เหตุใด Feign จึงคิดว่าวิธีนี้เป็นโพสต์?
การติดตามซอร์สโค้ด:
1. มาดูคำอธิบายประกอบ feignclient เป็นรายการ:
2. ตามรูปแบบที่สอดคล้องกันของสปริงคลาวด์เราเปิดคลาส Feignautoconfiguration เพื่อดูตรรกะการกำหนดค่า:
ดูคำอธิบายประกอบในกล่องสีแดงของภาพด้านบน: คลาสนี้จะถูกกระตุ้นเมื่อไม่มี iloadbalancer โครงการของเราเปิดใช้งานริบบิ้นดังนั้นจึงต้องมีอยู่ ดูความคิดเห็นอีกครั้ง: Load Balancing Ribbon ไคลเอนต์จำเป็นต้องใช้ Feignribbonclientautoconfiguration เพื่อกำหนดค่าคลาสนี้ ไป ~
ดังที่แสดงในภาพด้านบนให้ดูที่ความคิดเห็นของกล่องสีแดง: ตามลำดับของการนำเข้าจากบนลงล่าง: httpClientfeignloadbalancedconfiguration> okhttpfeignloadbalancedconfiguration > defaultFeignloadBalancedConfigrum
ตามคำจำกัดความของโปรโตคอล HTTP, @requestbody+ requestmethod.get ได้รับการสนับสนุน ดังนั้นจึงขึ้นอยู่กับการใช้งานที่แตกต่างกันของชุดเครื่องมือ การตรวจสอบซอร์สโค้ดฉันพบว่าไม่รองรับ OKHTTP และ HTTPURLCONNECTION (รายงานข้อผิดพลาด) เฉพาะ HTTPPClient เท่านั้นที่รองรับ (HttpurlConnection เริ่มต้นจะรายงานข้อผิดพลาด)
เรารู้ว่ามีเพียง httpClient เท่านั้นที่รองรับ @requestbody+requestmethod.get ดังนั้นเราต้องปฏิบัติตามเงื่อนไขและไปที่ httpClientfeignloadbalancedConfiguration ตรวจสอบซอร์สโค้ด:
จะเห็นได้ว่าคลาส ApacheehttpClient นั้นมีอยู่ภายใต้ ClassPath มาเพิ่มใน POM:
<Effercing> <roupId> io.github.openfeign </groupId> <ratifactId> feign-httpClient </artifactid>
ในที่สุดแพ็คเกจ feign-httpclient-9.5.0.jar ถูกโหลดและเปิดและพบว่ามี apachehttpclient.class คลิกในและดูว่าจริง ๆ แล้วมันเป็น httppclient
ดังนั้น POM จึงแนะนำ feign-httpClient-》 ApacheeHttpClient.class-》 ไปที่ httpClientfeignloadBalancedConfiguration-》 เมื่อร้องขอ httpClient-》 สนับสนุน @requestbody+ requestmethod.get
2. โซลูชัน:
แนะนำใน POM
<Effercing> <roupId> io.github.openfeign </groupId> <ratifactId> feign-httpClient </artifactid>
หลังจากได้รับการปรับปรุง Maven แล้วตรวจสอบว่าแพ็คเกจ Feign-httpClient-9.5.0.0.jar มีอยู่ในโครงการหรือไม่
สรุป
ด้านบนเป็นวิธีแก้ปัญหาของสปริงคลาวด์แกล้งทำเป็นว่าบรรณาธิการแนะนำให้คุณรู้จัก การแก้ปัญหาข้อผิดพลาดของ Spring Cloud Feign ไม่รองรับ @requestbody+ requestmethod.get ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!