Swagger Demo

最近项目中用了Swagger就研究了一下,顺便记录了下来,不过个人感觉这个东西虽然方便调试接口了,但对代码的污染太严重了

1.导入依赖(这里是使用maven的方式)

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

2. 创建Swagger配置类(我这里是做了分组的)和业务枚举类

package com.example.demo.config;

import com.example.demo.constant.BusinessExplantEnum;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Swagger 配置类
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {

    @Bean
    public Docket groupName1(){
        return getDocket(BusinessExplantEnum.GROUP_1.getGroupName(), BusinessExplantEnum.GROUP_1.getGroupContent(), "Title_1");
    }

    @Bean
    public Docket groupName2(){
        return getDocket(BusinessExplantEnum.GROUP_2.getGroupName(), BusinessExplantEnum.GROUP_2.getGroupContent(), "Title_2");
    }

    public Docket getDocket(String groupName, String path, String apiName){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo(apiName))
                .groupName(groupName)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller." + path))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo(String title){
        return new ApiInfoBuilder()
                .title(title)
                .version("1.0")
                .build();
    }
}

业务枚举类(不是必须的,具体看自己的业务需求)

package com.example.demo.constant;

/**
 * 业务枚举类
 */
public enum BusinessExplantEnum {

    GROUP_1("分组1", "demo1"),

    GROUP_2("分组2", "demo2");

    private String groupName;

    private String groupContent;

    BusinessExplantEnum(String groupName, String groupContent){
        this.groupName = groupName;
        this.groupContent = groupContent;
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public String getGroupContent() {
        return groupContent;
    }

    public void setGroupContent(String groupContent) {
        this.groupContent = groupContent;
    }

}

3.创建参数实体类

package com.example.demo.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 参数实体类
 */
@ApiModel(value = "DemoParamDTO", description = "参数实体类")
public class DemoParamDTO {

    @ApiModelProperty(value = "用户ID")
    private String id;

    @ApiModelProperty(value = "用户名称")
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4.创建Controller类(这里就写一个,另一个内容一样)

package com.example.demo.controller.demo1;

import com.example.demo.common.ResponseResult;
import com.example.demo.model.DemoParamDTO;
import com.example.demo.model.ResponseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "测试swagger功能1")
@RestController
@RequestMapping(value = "/controller1", produces = MediaType.APPLICATION_JSON_VALUE)
public class DemoController {

    @ApiOperation(value = "swagger方法")
    @PostMapping(value = "/testMethod")
    public ResponseResult<ResponseVO> testMethod(@ApiParam(required = true, name = "paramDTO", value = "接口入参")@RequestBody DemoParamDTO paramDTO){
        System.out.println("id:" + paramDTO.getId());
        System.out.println("name:" + paramDTO.getName());
        return ResponseResult.success(new ResponseVO());
    }

}

5.启动Application服务

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplicationpublic class DemoApplication {

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

}

下图是项目目录结构

然后输入浏览器输入http://localhost:8080/swagger-ui.html就可以看到效果了

 

原文地址:https://www.cnblogs.com/jadening/p/14100649.html