Как запустить Swagger 3 на Spring Boot 3

Используя свежий 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.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
13
0
7 814
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Последнее 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...

Нашли ли вы какое-либо другое решение, кроме понижения весенней загрузочной версии @Ahmed

Tabish Hafeez 04.01.2023 20:56

Привет @TabishHafeez. Как говорится в ответе, Spring Boot 3.0 покрывается SpringDoc 2.0.

Ahmed Tawfik 05.01.2023 21:30

Для 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

sineverba 09.01.2023 15:49

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>

Другие вопросы по теме