В этом примере мы покажем вам, как разработать простое приложение Spring Boot с клиентом Feign для использования службы Weather REST.
Spring Boot — это основанная на Java инфраструктура, которая упрощает создание веб-приложений и приложений для предприятий. Spring Boot имеет встроенный Tomcat, предоставляет «начальные» зависимости и не требует настройки XML.
Feign — это декларативная структура, разработанная Netflix для реализации клиентов REST API . Feign позволяет создавать клиенты REST, объявляющие и аннотирующие интерфейс, фактическая реализация предоставляется во время выполнения.
1. Проектная среда
Этот пример будет реализован с использованием следующих инструментов:
- JDK 1.8.81
- IntelliJ 2018.2.2
- Spring Boot 2.0.4
- Gradle 4.10
- Весеннее Облако Финчли.SR1
С этой информацией, начнем!
2. Создайте приложение Spring Boot
Нажмите Файл -> Создать -> Проект
Выберите Spring Initializr и выберите правильную версию JDK.
Добавьте имя группы и артефакта . Выберите Gradle Project и введите версию для своего проекта.
В следующем окне выберите параметры:
- Core -> DevTools
- Сеть -> Сеть
- Облако -> Облако Bootstrap
Выберите место для проекта и нажмите кнопку Готово .
И вуаля! У вас есть приложение Spring Boot.
3. Создайте контроллер и запустите приложение
Создайте один класс с именем FeignController
. Аннотируйте Java-класс как Controller
и реализуйте метод GET
который возвращает ResponseEntity
с фиктивными данными. После этого я собираюсь дополнить карту реальной информацией.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
package com.example.feign.controller; @RestController public class FeignController { private final IWeatherClient weatherClient; @Autowired public FeignController(IWeatherClient weatherClient) { this .weatherClient = weatherClient; } @GetMapping (path = "/weather" ) ResponseEntity<Map> getWeather() { return ResponseEntity.ok(weatherClient.getWeather().getBody()); } } |
Отредактируйте файл application.properties с портом для развертывания приложения.
1
|
server.port=9090 |
Наконец, запустите и протестируйте первую версию приложения.
4. Фальсификация реализации клиента
Отредактируйте файл сборки .gradle и включите следующие зависимости:
1
2
3
|
compile('org.springframework.boot:spring-boot-starter-web-services') compile('org.springframework.cloud:spring-cloud-starter-openfeign') compile('org.springframework.cloud:spring-cloud-starter-config') |
Не забудьте запустить задачу сборки Gradle.
Создайте один пакет и один интерфейс. Это будет наш клиент. Я назвал это IWeatherClient
Аннотируйте интерфейс как FeignClient
и добавьте один метод для получения погоды. Аннотация @FeignClient
требует, чтобы вы @FeignClient
имя и URL-адрес службы. В этом случае я выбрал данные, такие как имя, и использовал свойство для URL.
1
2
3
4
5
6
7
8
9
|
package com.example.feign.feign; @FeignClient (name = "data" , url = "${feign.client.url}" ) public interface IWeatherClient { @RequestMapping (method = RequestMethod.GET) ResponseEntity<Map> getWeather(); } |
Добавьте одну реализацию для интерфейса. Это будет запасной вариант, если что-то пойдет не так, вызывая сервис. В этом случае у меня нет запасного варианта, поэтому я возвращаю ноль.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
package com.example.feign.feign.imp; @Component public class WeatherFallback implements IWeatherClient { @Override public ResponseEntity <map> getWeather() { return null ; } } </map> |
Аннотируйте основной класс, чтобы включить Feign Clients. Аннотация @EnableFeignClients
требует, чтобы вы включили базовые пакеты.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
package com.example.feign; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients (basePackages = { "com.example.feign.feign" , "com.example.feign.controller" }) public class FeignApplication { public static void main(String[] args) { SpringApplication.run(FeignApplication. class , args); } } |
Наконец, используйте клиент feign в контроллере и снова запустите приложение.
5. Заключение
В этой записи объясняется, как создать декларативный HTTP-клиент, использующий Feign для использования Weather API. Цель Feign — уменьшить сложность равномерного связывания знаменателя с HTTP APIS, независимо от успокоенности.