Используя свежий Spring Initialzr с Java17 и Spring Boot 3.0.0, а также дополнительное дополнение к pom.xml для Springfox Swagger 3, я не могу на всю жизнь заставить страницы Swagger работать. Вместо этого я получаю страницу ошибки whitelabel с кодом 404.
Pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Стандартные URL-адреса Swagger, определенные на этой странице проблем Github, не работают для вышеуказанного проекта pom.xml.




Последнее Springfox-загрузчик-стартер версии 3.0.0 и springdoc-openapi-ui 1.6.13
кажется, не поддерживает spring-boot 3.
Нам нужно подождать, пока новая версия не примет пакет jakarta.servlet.
Я сдался и начал использовать Spring Boot 2.7 после публикации вопроса. Но, увидев ответ Дмитрия, я в последний раз проверил Springdoc и обнаружил, что Springdoc v2 поддерживает Spring Boot 3.
По сути, в их pom нужно поместить следующее:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0</version>
</dependency>
Затем можно получить доступ к странице Swagger, используя следующий URL-адрес: http://localhost:8080/swagger-ui.html (не забудьте добавить контекстный путь, если он вам нужен). По какой-то причине при открытии он перенаправляется на http://localhost:8080/swagger-ui/index.html, хотя изначально возвращал 404...
Привет @TabishHafeez. Как говорится в ответе, Spring Boot 3.0 покрывается SpringDoc 2.0.
Для Gradle вы можете добавить это:
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.0'
в дополнение к добавлению springdoc-openapi-starter-webmvc-ui (v2.0.2 для меня), как указано в принятом ответе, мне также нужно было удалить org.springdoc:springdoc-openapi-ui:1.6.13.
Это было там, потому что я пробовал это раньше. Если он присутствует, все еще существует ссылка не на Джакарту, которую Spring пытается разрешить (и не может этого сделать).
Мне также нужно было добавить эту зависимость, иначе у меня было бы неприятное сообщение при запуске (версия разрешается спецификацией Spring Boot):
implementation group: 'org.hibernate.validator', name: 'hibernate-validator'
Я согласился с @Ahmed Tawfik, потому что тоже столкнулся с тем же. Но сегодня я попробовал тот же подход с новой версией зависимости «springdoc-openapi-starter-webmvc-ui» и Spring Boot 3.0.2-SNAPSHOT.
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
потому что предыдущий «springdoc-openapi-ui» заменен на указанный выше.
Кроме того, укажите ниже путь к конфигурации безопасности для пользовательского интерфейса swagger.
"/v3/api-docs/**","/swagger-ui/**"
Для моего проекта,
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.exceptionHandling(exceptionHandlingConfigurer -> exceptionHandlingConfigurer.authenticationEntryPoint(unauthorizedHandler))
.authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> {
try {
authorizationManagerRequestMatcherRegistry
.requestMatchers(HttpMethod.POST, POST_AUTH_WHITELIST).permitAll()
.requestMatchers(HttpMethod.GET, GET_AUTH_WHITELIST).permitAll()
.requestMatchers("/v3/api-docs/**", "/swagger-ui/**").permitAll()
.anyRequest()
.authenticated()
.and()
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
} catch (Exception e) {
throw new ResourceNotFoundException(e.getMessage());
}
}
)
.formLogin(AbstractHttpConfigurer::disable)
.httpBasic(AbstractHttpConfigurer::disable).addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.authenticationProvider(daoAuthenticationProvider()).build();
}
Ссылка пользовательского интерфейса swagger будет:
http://server:port/context-path/swagger-ui.html
Пожалуйста, настройте сервер, порт и контекстный путь в соответствии с вашими личными изменениями.
Все вышеперечисленные шаги отлично работают с моим проектом. Мне не нужна дополнительная настройка.
Кроме того, вы можете добавить собственный путь (необязательно):
springdoc.swagger-ui.path=/swagger-ui.html
Вот официальная документация по OpenApi 3 и Spring Boot: https://springdoc.org/v2/#features
В приведенной выше документации вы также можете изучить дополнительные конфигурации и другие вещи.
Счастливого обучения! ✌️
Это должен быть принятый ответ на 01.09.2023
Springdoc работает с Spring boot 3.0.1
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
URL-адрес по умолчанию: http://localhost:8080/swagger-ui/index.html.
Используйте Open API вместо swagger для Spring v3.0. Следуйте этому документу Open API Docs
Следующие зависимости отлично работают для меня.
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample.app</groupId>
<artifactId>hello-world</artifactId>
<version>1.0.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.1</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
</project>
Нашли ли вы какое-либо другое решение, кроме понижения весенней загрузочной версии @Ahmed