Почему swagger-maven-plugin не находит мою операцию API?

Я пытаюсь настроить документацию API с помощью Swagger 2.0 и swagger-maven-plugin в проекте Spring Boot. В своем контроллере я использую аннотации io.swagger.v3.oas:

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;

@RestController
@RequestMapping("/api")
public class CountryController {

    @Operation(summary = "Read country by ISO 3166-1 alpha-2 code", responses = {
        @ApiResponse(responseCode = "200", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Country.class)))
    })
    @RequestMapping(value = { "/country/{key}" }, method = { RequestMethod.GET })
    @PreAuthorize("#oauth2.hasScope('read')")
    Country getCountry(
            @Parameter(name = "key", description = "The ISO 3166-1 alpha-2 code of the country") @PathVariable final String key,
            @Parameter(hidden = true) final Principal principal) {
    return countryService.load(key, UserInSession.fromPrincipal(principal, userDetailsService))
        .orElse(null);
    }
}

И в моем pom.xml

        <plugin>
            <groupId>com.github.kongchen</groupId>
            <artifactId>swagger-maven-plugin</artifactId>
            <version>${swagger-maven-plugin-version}</version>
            <configuration>
                <apiSources>
                    <apiSource>
                        <springmvc>true</springmvc>
                        <locations>
                            <location>ch.want.funnel.controller</location>
                        </locations>
                        <schemes>
                            <scheme>http</scheme>
                            <scheme>https</scheme>
                        </schemes>
                        <host>www.funnel.travel</host>
                        <basePath>/api</basePath>
                        <info>
                            <title>funnel.travel API</title>
                            <version>${project.version}</version>
                            <description>
                                API document for funnel.travel server
                            </description>
                            <termsOfService>http://www.funnel.travel/license.html</termsOfService>
                            <contact>
                                <email>[email protected]</email>
                                <name>Simon Niederberger</name>
                                <url>http://www.funnel.travel</url>
                            </contact>
                            <license>
                                <url>http://www.funnel.travel/license.html</url>
                                <name>Commercial, all rights reserved</name>
                            </license>
                        </info>
                        <securityDefinitions>
                            <securityDefinition>
                                <name>funnel OAuth</name>
                                <type>oauth2</type>
                                <name>Authorization</name>
                                <in>header</in>
                            </securityDefinition>
                        </securityDefinitions>
                        <outputPath>${basedir}/generated/document.html</outputPath>
                        <swaggerDirectory>${basedir}/generated/swagger-ui</swaggerDirectory>
                        <!-- <swaggerApiReader>com.wordnik.swagger.jaxrs.reader.DefaultJaxrsApiReader</swaggerApiReader> -->
                        <attachSwaggerArtifact>true</attachSwaggerArtifact>
                    </apiSource>
                </apiSources>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
   ...
    <dependency>
        <groupId>io.swagger.core.v3</groupId>
        <artifactId>swagger-core</artifactId>
        <version>2.0.0</version>
    </dependency>

Из журнала maven я вижу, что пакет ch.want.funnel.controller сканируется, но генерируются только пути API для / login и / error! Мне не хватает аннотации или конфигурации плагина?

Я бы предпочел не переключаться на springfox, так как я предпочитаю создавать swagger.json во время компиляции.

Спасибо, Саймон

Нашел выпуск на github 550, очевидно, плагин все еще основан только на устаревших аннотациях 1.5.x.

Simon 21.04.2018 09:40

Я сдался и перешел на Springfox

Simon 21.04.2018 17:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
7 138
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Насколько мне известно, плагин Maven по умолчанию использует JaxRsReader. Этот swaggerApiReader сканирует аннотации JAX-RS для создания документации / описания.

См. Документацию swaggerApiReader в https://github.com/kongchen/swagger-maven-plugin для альтернативного читатели.

Это может быть причиной того, что в вашей настройке аннотации Swagger не распознаются.

Ответ принят как подходящий

Вам нужен обновленный / более новый плагин maven. Посмотрите на https://github.com/swagger-api/swagger-core/tree/master/modules/swagger-maven-plugin

Вы используете аннотации для OpenAPI 3, но используете maven-plugin для OpenAPI 2.

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