swagger是一个可以生成RESTful风格的接口文档、支持在线调试的文档框架。

接口指的是后台暴露给前端访问的地址,一个服务、模块暴露出来给其他服务、模块调用的地址,是controller上映射的url。

 

原生swagger的使用

依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>

swagger的ui有很多种,常见的如下,根据自己的审美添加其中一种即可

<!-- swagger-bootstrap-ui,访问 /doc.html -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.6</version>
</dependency>

<!-- swagger-ui,官方提供的ui,访问 /swagger-ui.html -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>

<!-- swagger-ui-layer,访问 /docs.html -->
<dependency>
    <groupId>com.github.caspar-chen</groupId>
    <artifactId>swagger-ui-layer</artifactId>
    <version>1.1.3</version>
</dependency>

<!-- swagger-mg-ui,访问 /document.html -->
<dependency>
    <groupId>com.zyplayer</groupId>
    <artifactId>swagger-mg-ui</artifactId>
    <version>1.0.6</version>
</dependency>

 
配置类 config.SwaggerConfig

/**
 * Swagger配置
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("xm商城接口文档")  //文档标题
                .description("2020.07.01更新")  //文档描述
                .termsOfServiceUrl("")
                .version("1.0")  //版本
                .build();
    }


    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())  //设置ApiInfo
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.chy.mall.controller"))  //指定要扫描Swagger注解的基本包,指定controller即可,会自动扫描相关的实体类
                .paths(PathSelectors.any())
                .build();
    }

}

 

Swagger注解使用示例

实体类

@Data
@ApiModel("用户信息")
public class User {

    @ApiModelProperty("用户id")
    private Integer id;

    @ApiModelProperty("用户名")
    private String username;

    @ApiModelProperty("密码")
    private String password;

    @ApiModelProperty("手机号")
    private String tel;

    @ApiModelProperty("住址")
    private String address;

}

 

controller

/**
 * 对用户的操作
 */
@RestController
@RequestMapping("/user")
@Slf4j
@Api(value = "user-api", tags = "用户接口")   //value一般取类名去掉Controller后的camel写法,加上-api
public class UserController {

    /**
     * 根据用户id查询用户信息
     */
    @GetMapping("/info/{id}")
    @ApiOperation(value = "查询用户信息", notes = "根据用户id查询用户信息")  //value是简述,notes是补充、说明
    @ApiImplicitParam(name = "id", value = "用户id", dataType = "int", paramType = "path", required = true)
    public User findUserById(@PathVariable Integer id) {
        User user = new User();
        user.setId(id);
        return user;
    }


    /**
     * 注册
     */
    @PostMapping("/register")
    @ApiOperation(value = "注册", notes = "此接口用于处理前端提交的注册表单")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "username", value = "用户名", dataType = "string", paramType = "form", required = true),
            @ApiImplicitParam(name = "password", value = "密码", dataType = "string", paramType = "form", required = true),
            @ApiImplicitParam(name = "tel", value = "手机号", dataType = "string", paramType = "form"),
            @ApiImplicitParam(name = "address", value = "住址", dataType = "string", paramType = "form")
    })
    public String register(@ApiIgnore User user) {  //@ApiIgnore 忽略此参数,使用实体类接收时,尽量重新使用@ApiImplicitParam表名参数
        log.info("用户信息:{}", user);
        return "注册成功";
    }


    /**
     * 登录
     */
    @PostMapping("/login")
    @ApiOperation(value = "登录", notes = "此接口用于处理前端提交的登录表单")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "username", value = "用户名", dataType = "string", paramType = "form", required = true),
            @ApiImplicitParam(name = "password", value = "密码", dataType = "string", paramType = "form", required = true),
    })
    public String login(String username, String password) {
        log.info("用户名:{},密码:{}", username, password);
        return "登录成功";
    }


}

 

Swagger常用注解

@Api
用在controller上,描述该controller
 

@ApiOperation
用在方法上,描述该方法
 

@ApiImplicitParams
用在方法上,用于包含一组@ApiImplicitParam(参数说明)
 

@ApiImplicitParam
描述形参,一个@ApiImplicitParam描述一个形参。只有一个时可以直接放在方法上,有多个时需放在@ApiImplicitParams中。常用属性如下

属性 说明
name 参数名
value 描述信息
dataType 该参数的数据类型,和mybatis的别名差不多,可以小写
paramType 传参方式
required 是否必需,布尔型,默认false 不是必需的。和@RequestParam的required不同,@ApiImplicitParam的required只是在swagger文档中显示是否必需、在swagger中调试时检测参数是否为空
defaultValue 默认值

 
paramType 可选的值如下

可选的值 说明
path 通过url中restful方式传递参数
query 通过url中的?xxx=xxx&xxx=xxx方式传递参数
form 通过表单传递参数
header 通过请求头传递参数
body 通过请求体传递参数

 

@ApiIgnore
可标注在类上、方法上、形参表的参数类型前,被@ApiIgnore 修饰的部分不会被提取到接口文档中。

此注解常用于修饰未写好的类、方法,以及自动传入的参数,eg. request、response对象。