使用SpringBoot整合Swagger2构建API

关于如何创建SpringBoot项目本文不在说明,自行百度即可
本人使用的springboot 2.1.0版本,Swagger 2.9.2版本
本文创作时间:2018-12–07

1 创建SpringBoot项目,添加Swagger2的jar包

pom.xml配置如下
<properties>
    <swagger.version>2.9.2</swagger.version>
</properties>

<dependencies>
    <!--Swagger工具-->
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
    <dependency><!--添加Swagger依赖 -->
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>${swagger.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency><!--添加Swagger-UI依赖 -->
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>${swagger.version}</version>
    </dependency>
</dependencies>

2 新建Swagger2Config配置文件,代码如下

其中特别特别要注意的是里面配置了apis文件也就是controller包的路径,不然生成的文档扫描不到接口。
@Configuration
//用于开启Swagger
@EnableSwagger2
public class Swagger2Config {
    /**
     * 添加摘要信息(Docket)
     */
    @Bean
    public Docket controllerApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("标题:SpringBoot测试项目系统接口文档")
                        .description("描述:用于管理SpringBoot的接口,主要有以下功能模块...")
                        .contact(new Contact("FlyFish",null,null))
                        .version("版本号:1.0")
                        .build())
                .select()
                /** 扫描的包所在位置 */
                .apis(RequestHandlerSelectors.basePackage("com.springboot.api.web.restcontroller"))
                /** 扫描的 URL 规则  */
                .paths(PathSelectors.any())
                .build();
    }

}

3 Swagger2的使用

PersonRestController代码如下
package com.springboot.api.web.restcontroller;
@Api(value = "PersonRestController", description = "用户信息管理测试模块")
@RestController
public class PersonRestController {
    /**
     * Spring Data JPA 已自动为你注册 bean,所以可自动注入
     */
    @Autowired
    PersonRepository personRepository;

    @Autowired
    PersonService personService;

    /**
     * @ApiOperation 描述方法用途
     */
    @ApiOperation(value = "保存用户信息", notes = "用于保存用户的信息")
    /** @ApiImplicitParam 描述放的参数 */
    @ApiImplicitParams({
            @ApiImplicitParam(name = "name", value = "用户姓名", dataType = "String", required = true),
            @ApiImplicitParam(name = "address", value = "用户地址"),
            @ApiImplicitParam(name = "age", value = "用户年龄", dataType = "Integer")
    })
    @RequestMapping(value = "/save", method = RequestMethod.GET)
    public Person save(String name, String address, Integer age) {
        Person person = new Person(null, name, age, address);
        Person p = personRepository.save(person);
        return p;
    }

    /**
     * 测试 回滚
     */
    @ApiOperation(value = "回滚数据", notes = "用户测试回滚")
    @GetMapping("/rollback")
    public Person rollback(Person person) {
        Person personWithRollBack = personService.savePersonWithRollBack(person);
        return personWithRollBack;
    }
}
person代码

//@Entity注解指明这是一个和数据库表映射的实体类。
@Entity
/**
 * @ApiModel()用于类 ;表示对类进行说明,用于参数用实体类接收
 * value–表示对象名
 * description–描述
 * */
@ApiModel(value = "PerSon实体对象", description = "用于存放Person对象的数据")
public class Person {

    /**
     * @ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
     * value–字段说明
     * name–重写属性名字
     * dataType–重写属性类型
     * required–是否必填
     * example–举例说明
     * hidden–隐藏
     */
    /**
     * id
     * */
    @ApiModelProperty(name = "id", value = "用户id",dataType = "Long",example = "18",hidden = false)
    private Long id;
    /**
     * 姓名
     */
    /**
     * ①此处使用JSR-303注解来校验数据。
     */
    @Size(max = 4, min = 2)
    @ApiModelProperty(name = "name", value = "用户姓名",dataType = "String",example = "风羽",hidden = false)
    private String name;
    /**
     * 年龄
     */
    @ApiModelProperty(name = "age", value = "用户年龄",dataType = "Integer",example = "18",hidden = false)
    private Integer age;
    /**
     * 地址
     */
    @ApiModelProperty(name = "address", value = "用户地址",dataType = "String",example = "天空之城",hidden = false)
    private String address;
}
现在启动项目就可以了,然后访问Swagger默认网址就可以查看接口了
http://localhost:8080/swagger-ui.html#/

如下图

由于做了一些修改,所以导致展示界面于最后代码不一致,但是功能还是一样的

使用SpringBoot整合Swagger2构建API
使用SpringBoot整合Swagger2构建API

使用SpringBoot整合Swagger2构建API

一些注解的说明
@Api 修饰整个类,描述Controller的作用
    value 类名称(目前没发现效果显示) 
    description 类说明
@ApiIgnore 用于类或者方法上,可以不被swagger显示在页面上
@ApiOperation 展示每个API基本信息
    value api名称
    notes 备注说明
@ApiImplicitParam 用于规定接收参数类型、名称、是否必须等信息
    name 对应方法中接收参数名称
    value 备注说明
    required 该字段是否必须 boolean
    paramType 参数类型 body、path、query、header、form中的一种 
        body 使用@RequestBody接收数据 POST有效
        path 在url中配置{}的参数
        query 普通查询参数 例如 ?query=q ,jquery ajax中data设置的值也可以,例如 {query:”q”},springMVC中不需要添加注解接收
        header 使用@RequestHeader接收数据
    form 笔者未使用,请查看官方API文档
    dataType 数据类型,如果类型名称相同,请指定全路径,例如 dataType = “java.util.Date”,springfox会自动根据类型生成模型
@ApiImplicitParams 包含多个@ApiImplicitParam
@ApiParam 对单独某个参数进行说明,使用在类中或者controller方法中都可以。注解中的属性和上面列出的同名属性作用相同
以上为主要常用的注解介绍,请结合springfox使用查看
@ApiModel  用于类 ;表示对类进行说明,用于参数用实体类接收 
    value–表示对象名 
    description–描述 
    都可省略 
@ApiModelProperty 对模型中属性添加说明,
    value 参数名称
    required 是否必须 boolean
    hidden 是否隐藏 boolean 
    其他信息和上面同名属性作用相同,hidden属性对于集合不能隐藏,目前不知道原因
@ApiProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiError :发生错误返回的信息