springboot集成swagger

一、概要

  Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

二、详细步骤

  1.添加maven依赖

 <!--引入swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.20</version>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-annotations</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

  2.在pom中添加插件

      <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.14.1</version>
                <configuration>
                    <systemPropertyVariables>
                        <io.springfox.staticdocs.outputDir>${project.build.directory}/swagger/api/1.3.0</io.springfox.staticdocs.outputDir>
                        <io.swagger.json.uris>/v2/api-docs?group=api</io.swagger.json.uris>
                        <io.swagger.json.output.name>swagger-pai-v1.json</io.swagger.json.output.name>
                    </systemPropertyVariables>
                    <argLine>-Xmx256M -XX:MaxPermSize=128M</argLine>
                    <parallel>false</parallel>
                    <testFailureIgnore>true</testFailureIgnore>
                    <includes>
                        <include>**/*.java</include>
                    </includes>
                </configuration>
            </plugin>

三、添加配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket customDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .globalOperationParameters(setHeaderToken()) //如果使用到了token,这里加入token设置
                .apiInfo(apiInfo())
                .groupName("api")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.swagger.web.api")) //api接口目录
                .paths(PathSelectors.any())
                .build();
    }

    private List<Parameter> setHeaderToken() {
        ParameterBuilder tokenPra = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        tokenPra.name("Token").description("接口校验令牌").modelRef(new ModelRef("string")).defaultValue(TokenUtils.get()).parameterType("header")
                .required(true).build();
        pars.add(tokenPra.build());

        return pars;
    }

    private ApiInfo apiInfo() {
        Contact contact = new Contact("小明", "", "xiaoming@qq.com");

        return new ApiInfoBuilder().version("1.3").title("swagger测试接口").description("swagger测试接口").contact(contact).license("") .licenseUrl("http://www.qq.com").build(); } 
}
SwaggerConfig 类可随意放在代码的目录中,加入这些配置后,启动springboot项目,访问 http://localhost:8080/swaggerDemo/swagger-ui.html  ,其中swaggerDemo是项目的上下文,如果配置了不用上下文,也可以直接
http://localhost:8080/swagger-ui.html 进行启动,swagger的json路径为:http://localhost:8080/swaggerDemo/v2/api-docs?group=api,可以看到完整路径

四、生成swagger.json文件
编写测试类,在mvn install的时候可以将swagger.json生成到你在plugin配置的路径中
@WebAppConfiguration
//// 让 JUnit 运行 Spring 的测试环境, 获得 Spring 环境的上下文的支持
@RunWith(SpringRunner.class)
//// 获取启动类,加载配置,确定装载 Spring 程序的装载方法,它回去寻找 主配置启动类(被 @SpringBootApplication 注解的)
@SpringBootTest
public class SwaggerTest {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;


    @Before
    public void setup(){
        //init applicationContext
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void getSwaggerJson() throws Exception{
        //获取插件中配置的swagger文件输出地址
        String outputDir = System.getProperty("io.springfox.staticdocs.outputDir");
        //获取插件中配置的swagger.json的访问地址,有几个接口分组就有几个访问地址,地址必须是swagger2controller中原生的,如果是在web.xml自定义的则无法访问,因为mock的服务不会解析web.xml
        String uris = System.getProperty("io.swagger.json.uris");
        //获取插件中配置的每个json文件的名称,名称可配置多个,有几个接口分组就有几个名称, 名称的格式必须是:组件标识-接口分组标识-接口版本号,例如:swagger-api-v1
        String swaggerOutName = System.getProperty("io.swagger.json.output.name");
        String[] uriArray = uris.trim().split(",");
        String[] swaggerOutNameArray = swaggerOutName.trim().split(",");

        for (int i = 0; i < uriArray.length; i++){
            MvcResult mvcResult = this.mockMvc
                    .perform((MockMvcRequestBuilders.get(uriArray[i])) // 测试的相对地址
                            .accept(MediaType.APPLICATION_JSON_UTF8)) // accept response content type
                    .andExpect(MockMvcResultMatchers.status().isOk())  // 期待返回状态吗码200
                    .andReturn();

            MockHttpServletResponse response = mvcResult.getResponse();
            String swaggerJson = response.getContentAsString();
            Files.createDirectories(Paths.get(outputDir));
            try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputDir, swaggerOutNameArray[i]), StandardCharsets.UTF_8)){
                writer.write(swaggerJson);
            }
        }

    }
}

这样生成的json文件就会在项目的target目录的/swagger/api/1.3.0下,名字叫 swagger-pai-v1.json,路径及文件名都是在plugin中配置的

原文地址:https://www.cnblogs.com/aimed/p/10268992.html