في هذا القسم ، سنستكشف كيفية إنشاء طلبات متعددة المعلمات باستخدام Feign. يستخدم المؤلف طلبات طرق GET والنشر كأمثلة لشرح. مبادئ طلب الأساليب الأخرى (مثل الحذف ، وضع ، إلخ) هي نفسها ، ويمكن للقراء دراستها بأنفسهم.
الحصول على طلبات URL معلمات متعددة
لنفترض أن عنوان URL الذي نطلبه يحتوي على معلمات متعددة ، مثل http: // microservice-provider-user/get؟ id = 1 & username = Zhang San ، كيفية بنائه؟
نعلم أن Spring Cloud قد أضافت دعم SPRING MVC التعليق التوضيحي للتظاهر ، لذلك قد نجربه وفقًا لطريقة كتابة الربيع MVC:
feignclient ("microservice-provider-user") واجهة عامة userFeignClient { @requestmapping (value = "/get" ، method = requestMethod.get) get0 (مستخدم المستخدم)ومع ذلك ، فإن طريقة الكتابة هذه غير صحيحة ، وستقوم وحدة التحكم بإخراج استثناء مما يلي.
Feign.FeignException: الحالة 405 قراءة userfeignclient#get0 (user) ؛ محتوى:
{"timestamp": 1482676142940 ، "الحالة": 405 ، "خطأ": "الطريقة غير المسموح بها" ، "الاستثناء":
من الاستثناء ، يمكننا أن نرى أنه على الرغم من أننا نحدد طريقة GET ، إلا أن Feign سيظل استخدام طريقة POST لإرسال الطلب.
الطريقة الصحيحة للكتابة هي كما يلي:
(1) الطريقة 1
feignclient (name = "microservice-provider-user") الواجهة العامة userFeignClient {REquestMapping (value = "/get"هذه هي الطريقة الأكثر سهولة. يحتوي عنوان URL على العديد من المعلمات ، والطرق في واجهة Feign لها عدة معلمات. استخدم شرح @requestparam لتحديد المعلمات المطلوبة.
(2) الطريقة 2
يمكن أيضًا بناء عناوين URL متعددة المعلمات باستخدام الخريطة. عندما يكون هناك العديد من معلمات URL المستهدفة ، يمكن استخدام هذه الطريقة لتبسيط كتابة واجهة Feign.
feignclient (name = "microservice-provider-user") الواجهة العامة userFeignClient {REquestMapping (value = "/get"عند الاتصال ، يمكنك استخدام رمز مشابه لما يلي.
المستخدم العام GET (string username ، string password) {hashmap <string ، Object> map = maps.newhashmap () ؛ map.put ("id" ، "1") ؛ map.put ("اسم المستخدم" ، "Zhang San") ؛ إرجاع this.userfeignclient.get2 (MAP) ؛} يحتوي طلب النشر على معلمات متعددة
دعنا نناقش كيفية إنشاء طلب نشر يحتوي على معلمات متعددة باستخدام Feign. لنفترض أن وحدة تحكم مزود الخدمة مكتوبة مثل هذا:
RestControllerPublic Class USERCONTROLLER {postMapping ("/post") Public User Post ( @requestbody user) {...}}كيف نستخدم Feign لطلب؟ الجواب بسيط للغاية ، مثال:
@dignclient (name = "microservice-provider-user") واجهة عامة userFeGnclient { @requestmapping (value = "/post" ، method = requestMethod.post) Public User Post ( @requestbody user) ؛} نصائح
(1) للحصول على التفاصيل ، يرجى الرجوع إلى مشروع Microservice-Provider-User-Multiple-Params ومشروع Microservice-Consumer-Movie-Multiple-Params في الكود المصاحب لهذا الكتاب.
(2) بالإضافة إلى الطرق الموضحة في هذا القسم ، يمكننا أيضًا كتابة المشفرات الخاصة بنا لإنشاء طلبات متعددة المعلمات ، ولكن هذه الطريقة لها تكلفة ترميز أعلى وإعادة استخدام رمز أقل. لذلك ، لن يتكرر هذا الكتاب.
القراءة الموسعة
(1) آمل أن يتمكن Feign
(2) مشكلة موصى بها لاستخدام التعليقات التوضيحية الأصلية: https://github.com/spring-cloud/spring-cloud-netflix/issues/659
(3) يوصى بتحسين وظائف Feign: https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4) يوصى بدعم هيئة الطلب الاختياري (حاليًا ، سيقوم Feign بالإبلاغ عن استثناء عند نشر خالية): https://github.com/spring-cloud/spring-cloud-netflix/issues/1047
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.