تقدم هذه المقالة ملخصًا للمشاكل التي واجهتها في استخدام Spring Cloud Feign. تتم مشاركتها معك. التفاصيل كما يلي:
السؤال 1:
في المثال السابق ، تحدثنا عنه
requestmapping (value = "/user/{id}" ، method = requestMethod.get) getMapping ("/user/{id}") آثار هذين التعليقات التوضيحية مكافئة ، ولكن في الاستخدام المظالم ، يمكنك فقط استخدام الطريقة أعلاه ، ولا يمكنك استخدام GetMapping مباشرة. دعنا نغير المثال السابق إلى التعليق التوضيحي لمعرفة التأثير. وجدنا أنه عند إعادة تشغيل الخدمة بعد تعديل التعليق التوضيحي ، تم طرح الاستثناء التالي:
نسخة الكود كما يلي:
سبب: java.lang.IlegalStateException: Method FindByid غير مشروح مع نوع طريقة HTTP (ex.get ، post)
الاستثناء يعني أننا لا نحدد طريقة HTTP
السؤال 2:
في المثال السابق ، كشفنا عن الخدمة المريحة على النحو التالي:
getMapping ("/template/{id}") المستخدم العام findbyid (@pathvariable id) {return client.findbyid (id) ؛ }هنا ، نستخدم مباشرة معلمات طريقة FindByid
@pathvariable معرف طويل
دعونا نغير طريقة Feign لهذا
requestmapping (value = "/user/{id}" ، method = requestMethod.get) userbybyid (@pathvariable id) ؛ ثم بدأنا الخدمة ووجدنا أنه تم إلقاء استثناء مرة أخرى ، مع استثناء معلومات على النحو التالي:
نسخة الكود كما يلي:
سبب: java.lang.IlegalStateException: كان التعليق التوضيحي المتغير فارغًا على param 0.
يعني ما يقرب من أن المعلمة الأولى للشروح المتغير لا يمكن أن تكون فارغة ، فنحن نغيرها إلى الطريقة التالية:
requestMapping (value = "/user/{id}" ، method = requestMethod.get) userbybyid (@pathvariable ("id") معرف طويل) ؛ ابدأ من جديد واكتشف أن كل شيء على ما يرام.
السؤال 3: مشكلة متعددة المعلمات
requestmapping (value = "/user/name" ، method = requestMethod.get) user findByUserName (اسم المستخدم النهائي ، عنوان السلسلة النهائية) ؛
عند بدء الخدمة ، سيتم الإبلاغ عن الاستثناء التالي:
بسبب: java.lang.IlegalStateException: الطريقة لديها الكثير من معلمات الجسم: الملخص العام com.chhliu.springboot.restful.vo.user com.chhliu.springboot.restful.feignclient.userfeignclient.findbyusername (java.lang.string ، java
سبب الاستثناء: عند استخدام Feign ، إذا تم إرسال طلب GET ، فأنت بحاجة إلى إضافة شرح @REQUESTPARAM لتعديله قبل معلمة الطلب ، ولا يمكن لوحدة التحكم إضافة هذا التعليق التوضيحي لتعديل.
الحل للمشكلة أعلاه هو كما يلي:
requestmapping (value = "/user/name" ، method = requestMethod.get) user findbyusername ( @requestparam ("username") Final String username ، requestparam ("address") عنوان السلسلة النهائية) ؛ السؤال 4: طلب "Post" غير مدعوم
مثال رمز الخطأ:
requestmapping (value = "/user/name" ، method = requestMethod.get) المستخدم findByUserName (اسم المستخدم النهائي ، @requestparam ("العنوان") عنوان السلسلة النهائية) ؛ ملاحظة: لا يتم تعديل معلمة اسم المستخدم أعلاه باستخدام requestparam. إذا أرسلت طلبًا ، فستجد أن الخدمة التي تم استدعاؤها تم الإبلاغ عن طريقة طلب "Post" غير مدعومة. نستخدم بوضوح طريقة الحصول على. لماذا تعتبر الخدمة المسمى طريقة ما بعد؟ والسبب هو أنه عندما لا يتم تعديل اسم المستخدم عن طريق التعليق التوضيحي @REQUESTPARAM ، سيتم معاملته تلقائيًا كهيئة طلب. طالما أن هناك هيئة ، فسيتم اعتبارها طلبًا منشورًا من قبل Feign ، وبالتالي يتم إرسال الخدمة بأكملها كطلب بعد معلمة طلب وجسم.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.