springboot篇】十二. springboot集成swagger的使用

springboot整合swagger

中国加油,武汉加油

项目准备

  1. 创建项目nz1904-springboot-04-swagger
  2. 导依赖
     <!--导包-->
    <dependency>
    	<groupId>io.springfox</groupId>
    	<artifactId>springfox-swagger2</artifactId>
    	<version>2.7.0</version>
    </dependency>
    
    <dependency>
    	<groupId>io.springfox</groupId>
    	<artifactId>springfox-swagger-ui</artifactId>
    	<version>2.7.0</version>
    </dependency>
    

1. 案例

1.1 写一个Swagger配置类

package com.wpj.config;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
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;

@SpringBootConfiguration
@EnableSwagger2 //使能Swagger
public class SwaggerConfig {

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())              // 生成接口室页面显示的信息
                .select()               // 表示是否选择那些路径和API生成文档
                .apis(RequestHandlerSelectors.basePackage("com.wpj.controller")) // 告诉他要扫描的接口存在的这个包
                .paths(PathSelectors.any())                // 对所有API进行监控
                .build();                // 构建
    }

    /**
     * 主要作用是显示页面上的信息
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("这里是测试Swagger2的功能文档")    //文档的标题
                .description("这里是nz1904-springboot-04-swagger测试用的") //描述
                .contact("杰KaMi")   // 作者
                .version("v1.0")    // 版本
                .build();
    }

}

1.2 创建controller包

1.3 修改默认的主启动类

可不做,注意包结构

package com.wpj;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

1.4 启动项目并访问浏览器测试

在这里插入图片描述

2. 扩展

2.0.5 定义一个返回结果的类

package com.wpj.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RespResult<T> {

    private int code;
    private String msg;
    private T data;

    public RespResult(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

}

2.1 无参方法

package com.wpj.controller;

import com.wpj.result.RespResult;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户控制器
 */
@RestController
@Api(tags = {"这个是用户的控制器"})  // 说明当前的Controller作用
public class UserController {

    /**
     * 没有参数的玩法
     * @return
     */
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ApiOperation(value = "测试接口1",notes="调用当前方法的注意事项")
    public RespResult<String> test1(){

        RespResult<String> result = new RespResult<>();
        result.setCode(1);
        result.setMsg("请求成功");
        result.setData("xxxxxxxxxxxxxxxxxxxxx");

        return result;
    }
}

2.2 简单参数方法

/**
 * 简单参数的方法
 *   ApiImplicitParam注解
 *      header:请求的数据放在请求头
 *      query:请求参数放在请求地址上
 *      path:(RestFul中用于面向资源编程的获取数据的方式,配套的获取数据的注解 @PathVarible)
 *      body:不会用
 *      form:基本不用
 * @return
 */
@RequestMapping(value = "/test2", method = RequestMethod.GET)
@ApiOperation(value = "测试接口2",notes="调用当前方法的注意事项")
/**
 * paramType: 类型
 * name: 说明的是参数的名字叫什么
 * value: 当前参数含义
 * required: 当前使用接口参数是否一定要传
 * dataType: 参数的类型
 */
//    @ApiImplicitParam(paramType="query", name="name", value="名字", required = true, dataType = "String")
/**
 * ApiImplicitParam注解 和 ApiParam 是一样的,但是ApiParam更强大,相当于ApiImplicitParam的升级版
 */
@ApiParam(name = "name", value = "名字", required = true)
public RespResult<String> test2(@RequestParam("name") String name){

    RespResult<String> result = new RespResult<>();
    result.setCode(1);
    result.setMsg("请求成功");
    result.setData(name);

    return result;
}

2.3 多个参数方法

/**
 * 多个参数方法
 * @param name
 * @param pwd
 * @return
 */
@RequestMapping(value = "/test3", method = RequestMethod.GET)
@ApiOperation(value = "测试接口3",notes="调用当前方法的注意事项")
@ApiImplicitParams({
        @ApiImplicitParam(paramType="query", name="name", value="名字", required = true, dataType = "String"),
        @ApiImplicitParam(paramType="query", name="pwd", value="密码", required = true, dataType = "String")
})
@ApiResponse(code = 0, message = "请求成功")
public RespResult<String> test3(@RequestParam("name") String name,@RequestParam("pwd") String pwd){

    RespResult<String> result = new RespResult<>();
    result.setCode(1);
    result.setMsg("请求成功");
    result.setData(name+" : "+ pwd);

    return result;
}

2.4 对象参数方法

2.4.1 定义一个对象

package com.wpj.pojo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "用户对象")
public class User {
    @ApiModelProperty(value="用户id")
    private int id;
    
    @ApiModelProperty(value="名字")
    private String name;

    @ApiModelProperty(value="密码")
    private String pwd;
    
}

2.4.2 对象参数方法

@RequestMapping(value = "/test4", method = RequestMethod.POST)
@ApiOperation(value = "测试接口4",notes="调用当前方法的注意事项")
@ApiResponse(code = 0, message = "请求成功")
public RespResult<User> test4(@RequestBody User user){

    RespResult<User> result = new RespResult<>();
    result.setCode(1);
    result.setMsg("请求成功");
    result.setData(user);

    return result;
}

2.4.3 支持token传输

/**
 * 对象参数方法
 * @param user
 * @return
 */
@RequestMapping(value = "/test4", method = RequestMethod.POST)
@ApiOperation(value = "测试接口4",notes="调用当前方法的注意事项")
@ApiImplicitParam(paramType = "header", name = "token", value = "用户token", required = true, dataType = "String")
public RespResult<User> test4(@RequestBody User user, HttpServletRequest request){
    String token = request.getHeader("token");
    RespResult<User> result = new RespResult<>();
    result.setCode(1);
    result.setMsg("请求成功" + " : " + token);
    result.setData(user);

    return result;
}

2.5 文件上传

/**
 * 文件上传
 * @param uId
 * @param multipartFile
 * @return
 */
@RequestMapping(value = "/test5", method = RequestMethod.POST)
@ApiOperation(value = "测试接口4",notes="调用当前方法的注意事项")
@ApiImplicitParams({
        @ApiImplicitParam(paramType = "header", name = "token", value = "用户token", required = true, dataType = "String"),
        @ApiImplicitParam(paramType = "query", name = "uId", value = "用户ID", required = true, dataType = "Integer")

})
public RespResult<String> test5(@RequestParam("uId") int uId,@RequestParam("file") MultipartFile multipartFile){
    RespResult<String> result = new RespResult<>();

    //文件另存
    try {
        multipartFile.transferTo(new File("D://jiekami.jpg"));
        result.setCode(1);
        result.setMsg("请求成功" + " : " + multipartFile.getOriginalFilename());
        result.setData("上传成功。");

    } catch (IOException e) {
        result.setCode(0);
        result.setMsg("请求失败" + " : " + e.getMessage());
        result.setData("上传失败 。");
    }

    return result;
}

3. 常用的注解

@Api :这个注解的主要功能是描述当前的Controller是用来干嘛的
@ApiOperation :这个注解的主要功能是说明当前接口的作用
@ApiImplicitParam :这个的主要功能是接口的参数说明
@ApiImplicitParams :多参数的时候使用 参数的说明
@ApiParam :主要功能也是接口的参数说明
@ApiModel :主要就是对接口中传输的对象的说明
@ApiModelProperty :这个是接口参数对象中的成员变量的说明
@Apiresponse :返回结果的说明
发布了56 篇原创文章 · 获赞 11 · 访问量 4071

猜你喜欢

转载自blog.csdn.net/TheNew_One/article/details/104405321