Как включить классы, созданные swagger, в каталог проекта

#java #spring-boot #maven #swagger #swagger-codegen

#java #spring-boot #maven #swagger #swagger-codegen

Вопрос:

Я пытаюсь использовать Swagger Codegen для создания классов моделей для моего проекта spring boot. Я нашел несколько ссылок в Интернете и включил следующий плагин в свой pom.xml:

         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>
                            ${project.basedir}/src/main/resources/Contract-v1.yml
                        </inputSpec>
                        <generatorName>spring</generatorName>
                        <apiPackage>${project.groupId}.swagger.api</apiPackage>
                        <modelPackage>${project.groupId}.swagger.model</modelPackage>
                        <supportingFilesToGenerate>
                            ApiUtil.java
                        </supportingFilesToGenerate>
                        <configOptions>
                            <sourceFolder>src/main/java/</sourceFolder>
                            <delegatePattern>true</delegatePattern>
                            <interfaceOnly>true</interfaceOnly>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>
  

Я запускаю mvn install , и классы генерируются в каталоге /target/generated-sources/openapi . Но я не могу импортировать эти сгенерированные классы в свой класс контроллера REST.

Насколько я понимаю, <modelPackage> поле используется для идентификации пакета, в который должны быть помещены сгенерированные классы. Я прав в этом?

Несмотря на то, что эти сгенерированные классы находятся в правильном пакете, поскольку их нет в src/main/java , я, вероятно, не смогу импортировать их в другие классы.

Есть ли способ получить эти сгенерированные классы в src/main/java каталоге или я что-то упустил в конфигурации maven, из-за чего эти файлы недоступны для других классов?

Ответ №1:

Я также хотел добиться того, что вы пытались, и, хотя сначала я ошибался, в конце концов я понял это, мне не нужно было делать ничего особенного. Одно предостережение заключается в том, что я использовал swagger-codegen-maven-plugin вместо openapi-generator-maven-plugin .

Вот как выглядит моя конфигурация в день последней swagger-codegen-maven-plugin версии 3.0.35 . Когда я запускал mvn compile , все мои классы были сгенерированы в целевой папке, а src main java был помечен как папка sources. Я смог напрямую реализовать свой собственный контроллер непосредственно в проекте, обратившись к API сгенерированного кода. Tbh документация swagger-codegen-maven-plugin не самая лучшая, мне пришлось просмотреть несколько мест, чтобы понять смысл. Добавление некоторых ссылок

Общая конфигурация parameters:
https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen-maven-plugin

Параметры конфигурации:
https: //github.com/swagger-api/swagger-codegen/issues/7795

 <plugin>
        <groupId>io.swagger.codegen.v3</groupId>
        <artifactId>swagger-codegen-maven-plugin</artifactId>
        <version>3.0.35</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <inputSpec>${project.basedir}/api-docs/swagger.yaml</inputSpec>

              <generateApis>true</generateApis>
              <generateModels>true</generateModels>
              <generateSupportingFiles>false</generateSupportingFiles>
              <language>spring</language>

              <configOptions>

                <basePackage>com.company.project</basePackage>
                <apiPackage>com.company.project.api</apiPackage>
                <modelPackage>com.company.project.model</modelPackage>

                <interfaceOnly>true</interfaceOnly>
                <sourceFolder>src/main/java</sourceFolder>
                <hideGenerationTimestamp>true</hideGenerationTimestamp>
                <dateLibrary>java11</dateLibrary>
                <ignoreUnknownJacksonAnnotation>true</ignoreUnknownJacksonAnnotation>
                <notNullJacksonAnnotation>true</notNullJacksonAnnotation>
                <dateLibrary>false</dateLibrary>
                <useBeanValidation>true</useBeanValidation>
                <serializableModel>true</serializableModel>

              </configOptions>

            </configuration>
          </execution>
        </executions>
      </plugin>
  

Ответ №2:

Для пользовательского интерфейса swagger вам необходимо указать зависимость и выполнить некоторые базовые конфигурации, а также в REST API вам необходимо внести несколько изменений

https://blog-api-rest.herokuapp.com/swagger-ui.html#/

Вы можете ссылаться на этот API, созданный с помощью Swagger

В основной файл приложения Spring boot включите следующий код

 @SpringBootApplication
@EnableSwagger2
public class BlogappApplication {

    public static void main(String[] args) {
        SpringApplication.run(BlogappApplication.class, args);
    }

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors
                        .basePackage("com.example.blogapp.controller"))
                .paths(PathSelectors.regex("/.*"))
                .build().apiInfo(apiEndPointsInfo());
    }

    private ApiInfo apiEndPointsInfo() {
        return new ApiInfoBuilder().title("Spring Boot REST API")
                .description("Blog Application REST API")
                .contact(new Contact("name", "url", "email id"))
                .build();
    }
}
  

И измените все контроллеры, как показано в приведенном ниже коде

 @ApiOperation(value = "Deleting a comment", response = String.class)
    @ApiParam(value = "Comment ID", required = true)
    @ApiImplicitParam(name = "Authorization", value = "Access Token", required = true, allowEmptyValue = false, paramType = "header", dataTypeClass = String.class, example = "Bearer access_token")
    @DeleteMapping
    public String delete(@RequestParam String id){
        return commentService.delete(id);
    }
  

Перед использованием кодов перейдите по ссылке heroku swagger, которую я дал

Комментарии:

1. Вы объяснили, как настроить пользовательский интерфейс Swagger для проекта. Я смотрю, как использовать swagger code gen,