После создания клиентской библиотеки, как описано в этом post Я пытаюсь использовать эту библиотеку в своем потребителе, я добавил зависимость и добавил аннотацию @EnableFeignClients
к моему основному классу. Однако при запуске приложения Spring жалуется, что существует неудовлетворенная зависимость, сгенерированный интерфейс из библиотеки с аннотацией @FeignClient
, похоже, не сканируется и не создается экземпляр. Есть ли какая-либо конкретная конфигурация при включении такой сгенерированной клиентской библиотеки swagger?
Как использовать сгенерированный Swagger клиент (Feign)
Ответы (1)
Я борюсь с той же проблемой в течение довольно долгого времени, я хотел бы поделиться тем, что у меня есть, чтобы временно заставить это работать. По умолчанию swagger будет использовать устаревший клиент feign вместо нового openfeign, поэтому вам необходимо напрямую включить параметр конфигурации generateForOpenFeign
. Кроме того, если вы хотите использовать java8, чтобы избежать создания интерфейсов по умолчанию (которые ничего не делают), вы установили для параметра конфигурации defaultInterfaces
значение false.
Вот как выглядит мой swagger_config.json
:
{
"artifactId": "example-sdk",
"artifactVersion": "1.0.0",
"groupId": "com.example",
"apiPackage": "com.example.api",
"modelPackage": "com.example.model",
"configPackage": "com.example.configuration",
"generateForOpenFeign": true,
"java8": true,
"defaultInterfaces": false
}
После создания исходных файлов мне нужно обновить зависимости spring-cloud
и spring-boot-starter
в pom.xml
, чтобы сделать исходный код компилируемым.
Вот что я обновил:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Greenwich.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Чтобы использовать сгенерированные фиктивные клиенты, я должен поместить @EnableFeignClients(basePackages = {"com.example.api"})
в основной класс моего клиентского приложения. Я знаю, что это не лучшее решение, если у кого-то есть идея получше, посоветуйте.