如何在项目目录中包含swagger生成的类

问题描述

我正在尝试使用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配置丢失?

解决方法

对于宽阔的UI,您需要提供依赖关系并需要进行一些基本配置,并且在REST API中,您需要包含一些更改

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

您可以引用使用Swagger创建的此API

在Spring引导主应用程序文件中,包含以下代码

@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链接