#spring-webflux #openapi #api-doc #springdoc-openapi-ui
Вопрос:
Я добавляю Swagger в свой весенний сервис Webflux с функциональным контроллером. Сначала я получил эту ошибку:
Описание: Компонент ‘swaggerWelcome’, определенный в пути к классу ресурса [org/springdoc/webflux/ui/SwaggerConfig.class], не удалось зарегистрировать. Компонент с таким именем уже определен в ресурсе пути к классу [org/springdoc/webmvc/ui/SwaggerConfig.class] и переопределение отключено.
Экшен:
Подумайте о переименовании одного из компонентов или включении переопределения, установив spring.main.allow-bean-definition-переопределение=true
Поэтому я добавил spring.main.allow-bean-definition-переопределение=true в свой файл application.properties.
И теперь я получаю эту ошибку:
Описание:
Параметр 1 метода swaggerWebMvcConfigurer в org.springdoc.webmvc.ui.SwaggerConfig требовал компонента типа «org.springdoc.webmvc.ui.SwaggerIndexTransformer», который не удалось найти.
Экшен:
Рассмотрите возможность определения компонента типа «org.springdoc.webmvc.ui.SwaggerIndexTransformer» в вашей конфигурации.
Файл Pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company/groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- For all mvc and web functions -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- Default persistence functions -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>dev.miku</groupId>
<artifactId>r2dbc-mysql</artifactId>
<version>0.8.2.RELEASE</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.9</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webflux-ui</artifactId>
<version>1.5.9</version>
</dependency>
</dependencies>
</project>
Файл application.properties содержит:
spring.main.allow-bean-definition-overriding=true
Есть ли способ избежать такой конфигурации? В чем назначение преобразователя SwaggerIndexTransformer? Потому что на сайте https://springdoc.org/#getting-started они говорят, что «Никакая дополнительная конфигурация не требуется».
Комментарии:
1. В вопросе должно быть что-то нераскрытое. Когда вы вводите зависимости, автоконфигуратор пытался автоматически настроить их, но это не удается, потому что он говорит, что уже зарегистрирована конфигурация. Вы регистрируете конфигурацию? Если да, то где этот код?
2. Спасибо за ваш ответ @Toerktumlare. У меня нет никакого кода конфигурации. У меня просто есть это свойство в файле application.properties.
3. Затем я предлагаю вам привести небольшой воспроизводимый пример, чтобы другие могли его опробовать и подтвердить.
Ответ №1:
Ошибка заключалась в том, что в файле pom единственной зависимостью должна быть springdoc-openapi-webflux-ui