В этом разделе мы рассмотрим, как построить многопараметрические запросы с использованием Feign. Автор использует запросы методов GET и PUST в качестве примеров для объяснения. Принципы запроса других методов (такие как удаление, пут и т. Д.) Отстаиваются, и читатели могут изучать их сами.
Получить запросы на несколько параметров URL
Предположим, что URL-адрес, который мы запросите, содержит несколько параметров, таких как http: // microservice-provider-user/get? Id = 1 & username = zhang san, как его построить?
Мы знаем, что Spring Cloud добавила поддержку аннотаций Spring MVC, чтобы притворяться, поэтому мы могли бы также попробовать ее в соответствии с методом написания Spring MVC:
@Feignclient ("Microservice-Provider-user") public interface userfeignclient {@requestmapping (value = "/get", method = requestmethod.get) public user get0 (пользователь пользователя);}Однако этот метод написания неверен, и консоль выведет исключение, аналогичное следующему.
Feign.feignException: Status 405 Чтение userFeignClient#get0 (пользователь); содержание:
{«TimeStamp»: 1482676142940, «Статус»: 405, «Ошибка»: «Метод не разрешен», «Исключение»: «org.springframework.web.httprequestmethodnotsupportedException», «Сообщение»: «Метод запроса».
За исключением, мы видим, что, хотя мы указываем метод GET, Feign все равно будет использовать метод POST для отправки запроса.
Правильный способ написать это следующим образом:
(1) Метод 1
@Feignclient (name = "microservice-provider-user") public user userfeignclient {@requestmapping (value = "/get", method = requestmethod.get) public user get1 (@requestparam ("id") Long Id, @requestparam ("useraname") Стронг);}Это самый интуитивно понятный способ. URL имеет несколько параметров, а методы в интерфейсе Feign имеют несколько параметров. Используйте аннотацию @RequestParam, чтобы указать, каковы запрошенные параметры.
(2) Метод 2
Многопараметрические URL-адреса также могут быть построены с использованием карты. Когда существует много целевых параметров URL, этот метод может использоваться для упрощения написания интерфейса Feign.
@Feignclient (name = "microservice-provider-user") публичный интерфейс userfeignclient {@requestmapping (value = "/get", method = requestmethod.get) public user get2 (@requestparam map <string, object> map);};};};};};};};При вызове вы можете использовать код, аналогичный следующему.
Общественный пользователь get (String username, String password) {hashmap <string, object> map = maps.newhashmap (); map.put ("id", "1"); map.put ("имя пользователя", "Zhang San"); вернуть this.userfeignclient.get2 (map);} Запрос Post содержит несколько параметров
Давайте обсудим, как построить запрос POST, содержащий несколько параметров с использованием Feign. Предположим, что контроллер поставщика услуг написан так:
@Restcontrollerpublic class usercontroller {@postmapping ("/post") public post (@requestbody пользователь пользователь) {...}}Как мы используем Failign для запроса? Ответ очень прост, пример:
@Feignclient (name = "microservice-provider-user") публичный интерфейс userfeignclient {@requestmapping (value = "/post", method = requestmethod.post) public post (@Requestbody пользователь пользователя);} СОВЕТЫ
(1) Для получения подробной информации, пожалуйста, обратитесь к проекту проекта MicroService-Provider-User-Multiple-Params и проекта MicroService-Consumer-Feign-Multiple-Params в сопровождающем коде этой книги.
(2) В дополнение к методам, объясненным в этом разделе, мы также можем написать наш собственный энкодер для построения многопараметрических запросов, но этот метод имеет более высокую стоимость кодирования и более низкую повторную способность кода. Поэтому эта книга не будет повторена.
Расширенное чтение
(1) Я надеюсь, что Feign сможет поддержать запросы параметров для использования выпуска POJO: https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
(2) Выпуск рекомендуется использовать Fail Native Annotations: https://github.com/spring-cloud/spring-cloud-netflix/issues/659
(3) Рекомендуется повысить функциональность Фейна: https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4) Рекомендуется поддержать дополнительное тело запроса (в настоящее время Feign сообщит об исключении при публикации NULL): https://github.com/spring-cloud/spring-cloud-netflix/issues/1047
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.