[toc]
Swagger接口文档 
1.介绍 
Swagger是一个接口文档开发工具。按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。
目前,Spring迅速将Swagger规范纳入自身的标准,建立了Spring-swagger项目,后面改成了现在的Springfox。通过在项目中引入Springfox,可以扫描相关的代码,生成该描述文件,进而生成与代码一致的接口文档和客户端代码。这种通过代码生成接口文档的形式,在后面需求持续迭代的项目中,显得尤为重要和高效。
2.简单将Swagger整合进spring boot项目中-----Springfox Swagger 
springfox-swagger 是基于 Spring 生态系统的Swagger规范的实现。
- 创建springboot项目,导入依赖
<!--SpringBoot整合Swagger2所需要的依赖 -->
    <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>- 在项目中创建Swagger配置类
java
@Configuration
@EnableSwagger2
public class SwaggerConfig {
}- 启动项目,访问网址 http://localhost:9090/swagger-ui.html。即可看到最初是swagger模板
如果配置https证书,你需要用https来访问该链接
3.配置Swagger 
1.设置Swagger页面信息 
在之前创建的Swagger配置类中编写接口文档的作者信息等
java
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    //Docket是Swagger规范中的唯一的实体bean,它是生成API文档的核心对象,里面配置一些必要的信息
    @Bean
    public Docket customDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //扫描指定包中的注解
                .apis(RequestHandlerSelectors.basePackage("com.shu.mpadmin.controller"))
                //paths为过滤指定的注解。例子为过滤mp开头的接口
                .paths(PathSelectors.ant("/mp/**"))
                .build();
    }
    //设置Swagger文档中的作者信息等
    private ApiInfo apiInfo() {
        Contact contact = new Contact("suichen", "https://suichentree.github.io/", "18271801652@163.com");
        return new ApiInfoBuilder()
                .title("Suichen后台Api接口文档")
                .description("小程序后台的接口文档")
                .contact(contact)
                .version("1.0")
                .build();
    }
}2.通过为接口代码添加注解。来自动生成接口文档 
java
@Api(tags = "后台用户管理接口")
@RestController
@CrossOrigin
public class MpUserApi {
    @Autowired
    private MpUserMapper userMapper;
    //日志记录器
    private static final Logger logger = LoggerFactory.getLogger(MpUserController.class);
    @ApiOperation("用户登录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userName", value = "用户名", defaultValue = "admin"),
            @ApiImplicitParam(name = "passWord", value = "密码", defaultValue = "123456")
    })
    @GetMapping("/shu/admin/login2")
    public String Login2(String userName,String passWord){
        logger.info("后台登录接口2,/shu/admin/login2,参数:userName = "+userName+", passWord="+passWord);
        JSONObject json=new JSONObject();
        QueryWrapper<MpUser> query1=new QueryWrapper<>();
        query1.eq("name",userName).eq("password",passWord);
        MpUser one = userMapper.selectOne(query1);
        if(one!=null&&one.getIsAdmin()==1){
            json.put("isAdmin",1);
            json.put("userId",one.getId());
            json.put("userName",one.getName());
            json.put("password",one.getPassword());
            json.put("headURL",one.getHeadUrl());
        }else{
            json.put("isAdmin",0);
        }
        return json.toString();
    }
}注解说明:
- @Api注解可以用来描述当前Controller的功能。
- @ApiOperation注解用来描述一个方法的作用。
- @ApiImplicitParam注解用来描述一个参数,可以配置参数的中文含义,也可以给参数设置默认值,这样在接口测试的时候可以避免手动输入。
- @ApiImplicitParam注解来描述多个参数。如果有多个参数,则需要使用多个@ApiImplicitParam注解需要放在一个@ApiImplicitParams注解中。
