บทความนี้แนะนำบทสรุปของปัญหาที่พบในการใช้การแสร้งทำสปริงคลาวด์ มันถูกแบ่งปันกับคุณ รายละเอียดมีดังนี้:
คำถามที่ 1:
ในตัวอย่างก่อนหน้านี้เราได้พูดคุยเกี่ยวกับเรื่องนี้
@RequestMapping (value = "/user/{id}", method = requestMethod.get) @getMapping ("/user/{id}") ผลกระทบของคำอธิบายประกอบทั้งสองนี้เทียบเท่ากัน แต่ใช้ในการแสร้งทำเป็นคุณสามารถใช้วิธีการข้างต้นเท่านั้นและคุณไม่สามารถใช้ @getMapping ได้โดยตรง ลองเปลี่ยนตัวอย่างก่อนหน้าเป็นคำอธิบายประกอบ @getMapping เพื่อดูเอฟเฟกต์ เราพบว่าเมื่อบริการเริ่มต้นใหม่หลังจากแก้ไขคำอธิบายประกอบข้อยกเว้นต่อไปนี้จะถูกโยนลงไป:
การคัดลอกรหัสมีดังนี้:
เกิดจาก: java.lang.illegalstateException: วิธีการค้นหาไม่ได้บันทึกย่อด้วยประเภทวิธี HTTP (Ex.get, Post)
ข้อยกเว้นหมายความว่าเราไม่ได้ระบุวิธี HTTP
คำถามที่ 2:
ในตัวอย่างก่อนหน้านี้เราเปิดเผยบริการพักผ่อนดังนี้:
@getMapping ("/template/{id}") ผู้ใช้สาธารณะ findById (@PathVariable Long ID) {return client.findById (ID); -ที่นี่เราใช้พารามิเตอร์โดยตรงของเมธอด findById
@PathVariable Long ID
มาเปลี่ยนวิธีการของ Feign เป็นสิ่งนี้
@RequestMapping (value = "/user/{id}", method = requestMethod.get) ผู้ใช้ findById (@PathVariable Long ID); จากนั้นเราเริ่มบริการและเราพบว่ามีข้อยกเว้นอีกครั้งพร้อมข้อมูลข้อยกเว้นดังนี้:
การคัดลอกรหัสมีดังนี้:
เกิดจาก: java.lang.illegalstateException: คำอธิบายประกอบ pathvariable นั้นว่างเปล่าใน param 0
หมายถึงโดยประมาณว่าพารามิเตอร์แรกของคำอธิบายประกอบ pathvariable ไม่สามารถว่างเปล่าได้เราเปลี่ยนเป็นวิธีการต่อไปนี้:
@RequestMapping (value = "/user/{id}", method = requestMethod.get) ผู้ใช้ findById (@PathVariable ("id") id ยาว); เริ่มต้นอีกครั้งและพบว่าทุกอย่างโอเค
คำถามที่ 3: ปัญหาหลายพารามิเตอร์
@RequestMapping (value = "/ผู้ใช้/ชื่อ", method = requestMethod.get) ผู้ใช้ findByUserName (ชื่อผู้ใช้สตริงสุดท้าย, ที่อยู่สตริงสุดท้าย);
เมื่อเริ่มต้นบริการจะมีการรายงานข้อยกเว้นต่อไปนี้:
เกิดจาก: java.lang.illegalstateException: วิธีการมีพารามิเตอร์ร่างกายมากเกินไป: บทคัดย่อสาธารณะ com.chhliu.springboot.restful.vo.user com.chhliu.springboot.restful.feignlient.userfeignclient.findbyusername
สาเหตุของข้อยกเว้น: เมื่อใช้ Feign หากมีการส่งคำขอ GET คุณจะต้องเพิ่มคำอธิบายประกอบ @RequestParam เพื่อแก้ไขก่อนพารามิเตอร์คำขอและคอนโทรลเลอร์ไม่สามารถเพิ่มคำอธิบายประกอบนี้เพื่อแก้ไข
การแก้ปัญหาข้างต้นมีดังนี้:
@RequestMapping (value = "/ผู้ใช้/ชื่อ", method = requestMethod.get) ผู้ใช้ findByUserName (@RequestParam ("ชื่อผู้ใช้") สตริงสุดท้ายชื่อผู้ใช้ @RequestParam ("ที่อยู่") ที่อยู่สตริงสุดท้าย); คำถามที่ 4: ไม่รองรับวิธีการร้องขอ 'โพสต์'
ตัวอย่างรหัสข้อผิดพลาด:
@RequestMapping (value = "/user/name", method = requestMethod.get) ผู้ใช้ findByUserName (ชื่อผู้ใช้สตริงสุดท้าย, @RequestParam ("ที่อยู่") ที่อยู่สตริงสุดท้าย); หมายเหตุ: พารามิเตอร์ชื่อผู้ใช้ข้างต้นไม่ได้รับการแก้ไขด้วยคำอธิบายประกอบ @requestparam หากคุณส่งคำขอคุณจะพบว่าบริการที่เรียกว่าเป็นวิธีการรายงาน 'โพสต์' ไม่รองรับ เราใช้วิธี GET อย่างชัดเจน เหตุใดบริการที่เรียกว่าเป็นวิธีการโพสต์? เหตุผลก็คือเมื่อชื่อผู้ใช้ไม่ได้รับการแก้ไขโดยคำอธิบายประกอบ @RequestParam มันจะได้รับการปฏิบัติโดยอัตโนมัติเป็นหน่วยงานคำขอ ตราบใดที่มีร่างกายจะได้รับการพิจารณาว่าเป็นคำขอโพสต์โดย Feign ดังนั้นบริการทั้งหมดจะถูกส่งออกเป็นคำขอโพสต์พร้อมพารามิเตอร์คำขอและร่างกาย
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น