springboot 整合 swagger2.x,并导入到YApi

一、swagger配置

1.maven导入依赖

个人用的springboot版本为 2.5.0-M2

<!--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>
2.自定义swagger配置文件

目录结构如下:
在这里插入图片描述

自定义swagger配置信息,可以扫描多个包下的接口

package com.example.demo.config.swager;

import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;


@EnableSwagger2
@Configuration
public class SwaggerConfig {

    private final boolean enable = true;

    /**
     * 定义分隔符
     */
    private static final String splitor = ";";

    /**
     * 哪些包下的API需要生成swagger文档
     */
    String basePackages = "com.example.demo.controller" + splitor
            + "com.example.demo.controller1"
            ;

    @Bean
    public Docket createRestApi() {
        /**
         * 这是为了我们在用 swagger 测试接口的时候添加头部信息
         */
        List<Parameter> pars = new ArrayList<>();
//        ParameterBuilder tokenPar = new ParameterBuilder();
//        ParameterBuilder refreshTokenPar = new ParameterBuilder();
//        tokenPar.name("authorization").description("登录之后返回的accessToken").modelRef(new ModelRef("string")).parameterType("header").required(true);
//        refreshTokenPar.name("refresh_token").description("登录之后返回的refreshToken").modelRef(new ModelRef("string")).parameterType("header").required(true);
//        /**
//         * 多个的时候 就直接添加到 pars 就可以了
//         */
//        pars.add(tokenPar.build());
//        pars.add(refreshTokenPar.build());
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(basePackage(basePackages))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(pars)
                .enable(enable)
                ;
    }


    /**
     * 声明基础包
     *
     * @param basePackage 基础包路径
     * @return
     */
    public static Predicate<RequestHandler> basePackage(final String basePackage) {
        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
    }

    /**
     * 校验基础包
     *
     * @param basePackage 基础包路径
     * @return
     */
    private static Function<Class<?>, Boolean> handlerPackage(final String basePackage) {
        return input -> {
            for (String strPackage : basePackage.split(splitor)) {
                boolean isMatch = input.getPackage().getName().startsWith(strPackage);
                if (isMatch) {
                    return true;
                }
            }
            return false;
        };
    }

    /**
     * 检验基础包实例
     *
     * @param requestHandler 请求处理类
     * @return
     */
    @SuppressWarnings("deprecation")
    private static Optional<? extends Class<?>> declaringClass(RequestHandler requestHandler) {
        return Optional.fromNullable(requestHandler.declaringClass());
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("数据接口")
                .description("数据接口")
                .version("1.0")
                .build();
    }
}

二、swagger2.x注解规范

常用注解使用说明
@Api(value = “”, tags = “”)在controller类上使用,用于说明controller主要作用或者模块信息,tags 为标签信息,后边可以根据tags中内容生成YApi中接口目录
@ApiOperation(value = “”, notes = “”, consumes = “”, tags = “”, httpMethod = “”)在接口方法上使用,用于描述接口信息,value可以用于描述接口简要信息;notes可以用于详细描述接口信息(参数信息,接口逻辑等);consumes 用于说明接口传参方式(即Content-Type),常用值有:multipart/form-data(form表单传参方式), application/json(JSON格式传参);tags可为接口添加标签信息; httpMethod 说明接口请求方法,常用值有 POST,GET,PUT,DELETE,HEAD,OPTIONS
@ApiImplicitParam(name = “”, value = “”, required = true, paramType = “”)在接口方法上使用该注解,用于说明请求参数。name参数的名称;value参数说明;required是否必填,true必填,false非必填;paramType请求参数传参方式,常用值有:path, query, body, header, form
@ApiModel(value = “”, description = “”)当请求参数封装到类中时,可在类上使用该注解,用于说明封装类。value可用于给封装的类起别名,description 可用于描述封装类
@ApiModelProperty(value = “”, required = true)在请求参数封装的类中的一个属性上使用,用于说明请求参数。value说明参数简要信息;required参数是否必填,true必填,false非必填;
@ApiResponse(code = 400, message = “参数为空”)在接口上使用,用于标注接口的返回HTTP状态码和提示信息
1.form-data传参方式

需要在 @ApiOperation 注解中的consumes 指定传参方式为 multipart/form-data,此处设置consumes,是为了后边将接口数据导入到YApi,不设置consumes的话导入到YApi会不显示请求参数,Content-Type默认为 application/json。

@ApiOperation(value = "登录接口", notes = "此处为接口说明", consumes = "multipart/form-data", tags = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "account", value = "登录账号(邮箱或者手机号)", required = true, paramType = "form"),
            @ApiImplicitParam(name = "pass", value = "登录密码", required = true, paramType = "form")
    })
    @ResponseBody
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public Result<LoginResponseVO> login(String account, String pass){
        Result result = new Result();

        System.out.println("login account :====>>>> " + account);
        System.out.println("login pass :====>>>> " + pass);

        result.setCode("1");
        result.setMsg("success");

        LoginResponseVO loginResponseVO = new LoginResponseVO();
        loginResponseVO.setAge(18);
        loginResponseVO.setUserName("YCH");
        loginResponseVO.setSex(1);

        result.setData(loginResponseVO);

        return result;
    }
2.JSON格式传参

请求参数的封装类

package com.example.demo.common.vo;

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

@Data
@ApiModel(value = "添加用户请求参数", description = "添加用户请求参数描述信息---")
public class AddUserRequestVO {

    @ApiModelProperty(value = "用户名称", required = true)
    String userName;

    @ApiModelProperty(value = "用户年龄", required = true)
    Integer age;

    @ApiModelProperty(value = "用户性别,0保密;1男;2女", required = true)
    Integer sex;

}

返回参数的封装

package com.example.demo.common.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
public class Result <T>{

    @ApiModelProperty(value = "调用API返回状态码,1成功;-1失败", required = true)
    String code;

    @ApiModelProperty(value = "调用API返回提示信息", required = true)
    String msg;

    @ApiModelProperty(value = "调用API返回数据")
    T data;

}

package com.example.demo.common.vo;

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

@Data
@ApiModel(value = "登录响应参数")
public class LoginResponseVO {

    @ApiModelProperty(value = "用户名称", required = true)
    String userName;

    @ApiModelProperty(value = "用户年龄", required = true)
    Integer age;

    @ApiModelProperty(value = "用户性别,0保密;1男;2女", required = true)
    Integer sex;

}

接口方法

@ApiOperation(value = "添加用户", notes = "此处为接口说明")
    @ResponseBody
    @RequestMapping(value = "/user/add", method = RequestMethod.POST)
    public Result<LoginResponseVO> addUser(@RequestBody AddUserRequestVO addUserRequestVO){

        Result result = new Result();

        System.out.println("login addUserRequestVO :====>>>> " + addUserRequestVO);

        result.setCode("1");
        result.setMsg("success");

        LoginResponseVO loginResponseVO = new LoginResponseVO();
        loginResponseVO.setAge(18);
        loginResponseVO.setUserName("YCH");
        loginResponseVO.setSex(1);

        result.setData(loginResponseVO);

        return result;
    }

贴一下常用的几种接口入参方式

package com.example.demo.controller;

import com.example.demo.common.vo.AddUserRequestVO;
import com.example.demo.common.vo.LoginResponseVO;
import com.example.demo.common.vo.Result;
import io.swagger.annotations.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Api(value = "用户管理", tags = "用户管理")
@Controller
@RequestMapping("/test")
public class TestSwaggerController {

    @ApiOperation(value = "添加用户", notes = "此处为接口说明")
    @ResponseBody
    @RequestMapping(value = "/user/add", method = RequestMethod.POST)
    public Result<LoginResponseVO> addUser(@RequestBody AddUserRequestVO addUserRequestVO){

        Result result = new Result();

        System.out.println("login addUserRequestVO :====>>>> " + addUserRequestVO);

        result.setCode("1");
        result.setMsg("success");

        LoginResponseVO loginResponseVO = new LoginResponseVO();
        loginResponseVO.setAge(18);
        loginResponseVO.setUserName("YCH");
        loginResponseVO.setSex(1);

        result.setData(loginResponseVO);

        return result;
    }

    @ApiOperation(value = "登录接口", notes = "此处为接口说明", consumes = "multipart/form-data", tags = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "account", value = "登录账号(邮箱或者手机号)", required = true, paramType = "form"),
            @ApiImplicitParam(name = "pass", value = "登录密码", required = true, paramType = "form")
    })
    @ResponseBody
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public Result<LoginResponseVO> login(String account, String pass){
        Result result = new Result();

        System.out.println("login account :====>>>> " + account);
        System.out.println("login pass :====>>>> " + pass);

        result.setCode("1");
        result.setMsg("success");

        LoginResponseVO loginResponseVO = new LoginResponseVO();
        loginResponseVO.setAge(18);
        loginResponseVO.setUserName("YCH");
        loginResponseVO.setSex(1);

        result.setData(loginResponseVO);

        return result;
    }

    @ApiOperation(value = "根据用户id获取用户信息", notes = "此处为接口说明")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "用户id", required = true, paramType = "path"),
    })
    @ResponseBody
    @GetMapping("/user/{id}")
    public Result<LoginResponseVO> getUserInfo(@PathVariable(name = "id") Integer id){

        Result result = new Result();

        System.out.println("id is :====>>> " + id);

        result.setCode("1");
        result.setMsg("success");

        LoginResponseVO loginResponseVO = new LoginResponseVO();
        loginResponseVO.setAge(18);
        loginResponseVO.setUserName("YCH");
        loginResponseVO.setSex(1);

        result.setData(loginResponseVO);

        return result;
    }

    @ApiOperation(value = "根据用户id获取用户信息", notes = "此处为接口说明", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "用户id", required = true, paramType = "query"),
    })
    @ApiResponses({
            @ApiResponse(code = 0, message = "")
    })
    @ResponseBody
    @RequestMapping(value = "/userinfo")
    public Result<LoginResponseVO> getUserInfo1(Integer id){

        Result result = new Result();

        System.out.println("id is :====>>> " + id);

        result.setCode("1");
        result.setMsg("success");

        LoginResponseVO loginResponseVO = new LoginResponseVO();
        loginResponseVO.setAge(18);
        loginResponseVO.setUserName("YCH");
        loginResponseVO.setSex(1);

        result.setData(loginResponseVO);

        return result;
    }

}

三、json格式数据导入到YApi

启动项目,如果项目没有设置 项目请求路径(context-path),则直接访问 http://IP:PORT/swagger-ui.html 即可看到swagger自带的页面。 如果设置了context-path,例: /test,则项目启动后访问 http://IP:PORT/test/swagger-ui.html 即可。

在这里插入图片描述
在这里插入图片描述

这里同一个接口出现多种请求方法的文档,是由于该接口方法上的注解 @ApiOperation(value = “”, notes = “”, consumes = “”, tags = “”, httpMethod = “”)没有指定httpMethod,并且spring注解使用的 @RequestMapping 没有指定 RequestMethod

访问 http://localhost:8080/test/v2/api-docs 即可获取swagger JSON格式的 接口数据
在这里插入图片描述

打开我们的YApi,在对应的项目中,找到数据管理,开启URL导入,复制 swagger JSON格式数据的请求地址,粘贴到url输入框,点击上传即可。
在这里插入图片描述
注:如果公司部署的YApi是外网环境,这里填写的url地址应该为外网能访问的地址;如果YApi部署的是内网环境,则这里填写内网IP才能成功导入,所以这里的localhost需要修改为我本机的内网IP地址(http://10.17.16.13:8080/test/v2/api-docs)

导入成功后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现springboot整合swagger2 3.0.0版本,你需要按照以下步骤操作: 1. 创建一个maven项目并引入spring-boot-starter-web和springfox-boot-starter依赖。在pom.xml文件中添加以下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- <version>2.5.6</version> --> <!-- <version>2.6.3</version> --> <!-- <version>2.6.5</version> --> <version>2.7.3</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> </dependency> ``` 2. 在application.yml配置文件中添加以下内容: ```yaml spring: mvc: pathmatch: matching-strategy: ant_path_matcher ``` 3. 创建启动类,并在其中添加`@EnableSwagger2`注解。例如: ```java @SpringBootApplication @EnableSwagger2 public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 这样就完成了springboot整合swagger2 3.0.0版本的配置。你可以根据需要在项目中编写相应的接口文档注解以及其他相关配置。如果需要更详细的操作步骤和示例代码,你可以参考中提供的链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Springboot整合Swagger2(3.0.0版本)](https://blog.csdn.net/mo_sss/article/details/130820204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Springboot整合Swagger UI 3.0.0 版本](https://blog.csdn.net/qq_42102911/article/details/126410050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值