swagger-ui
作者:mmseoamin日期:2024-02-24

目录

一、swagger-ui简介

1.1 swagger-ui原理

1.2 swagger-ui特点

二、swagger-ui+springboot页面使用

2.1 swagger-ui的依赖

2.2 加入以上依赖要注意的点

2.3 工具类

3.4 swagger-ui 常用注解

@Api (修饰类)

@ApiOperation(修饰方法)

@ApiParam (接收参数)

@ApiModel (修饰参数对象类)

@ApiModelProperty(修饰参数对象类上的具体字段)

2.5 进入swagger-ui页面(http://localhost:8080/swagger-ui.html#/)


一、swagger-ui简介

1.1 swagger-ui原理

        Swagger UI允许任何人(无论您是开发团队还是最终用户)都可以可视化API资源并与之交互,而无需任何实现逻辑。它是根据您的OpenAPI(以前称为Swagger)规范自动生成的,具有可视化文档,可简化后端实现和客户端使用。

1.2 swagger-ui特点

  • 无依赖 UI可以在任何开发环境中使用,无论是本地还是在Web端中。

  • 人性化 允许最终开发人员轻松地进行交互,并尝试API公开的每个操作,以方便使用。

  • 易于浏览 归类整齐的文档可快速查找并使用资源和端点。

  • 所有浏览器支持 Swagger UI 在所有主要浏览器中均可使用,以适应各种可能的情况。

  • 完全可定制 通过完整的源代码访问方式以所需方式设置和调整Swagger UI。

  • 完整的OAS支持 可视化Swagger 2.0或OAS 3.0中定义的API。

    二、swagger-ui+springboot页面使用

    2.1 swagger-ui的依赖

     
        
       io.springfox    
       springfox-swagger2    
       2.7.0 
     
        
       io.springfox    
       springfox-swagger-ui    
       2.7.0 
    
    

    2.2 加入以上依赖要注意的点

    org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

    会报一个以上的错:这种错误是因为SpringBoot版本和Swagger版本不匹配导致的,博主Swagger和Swagger-UI用的都是Springfox 2.9.2的,SpringBoot是Idea中创建时自动提供的2.6.2的,Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher(在yml中加入以下内容)

    spring:
     mvc:
      pathmatch:
       matching-strategy: ant_path_matcher

    2.3 工具类

    package com.jpa.springdatajpatest.config;
    ​
    import com.google.common.base.Predicates;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    ​
    /**
     * @Author:
     * @Description:
     * @Date:Create In 2019-11-1311:07
     **/
    @Configuration
    @EnableSwagger2
    public class Swagger2Config {
    ​
        @Bean
        public Docket webApiConfig(){
    ​
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("webApi")
                    .apiInfo(webApiInfo())
                    .select()
                    //复制进来只需要改一个 就是这个路径 和你的controller 路径相匹配
                    //如果匹配 就可以自动识别 你的 controller 路径
                    .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
                    .paths(Predicates.not(PathSelectors.regex("/error.*")))
                    .build();
    ​
        }
    ​
        @Bean
        public Docket adminApiConfig(){
    ​
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("adminApi")
                    .apiInfo(adminApiInfo())
                    .select()
                    //同上也需要改
                    .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                    .build();
    ​
        }
    ​
        //接口的信息
        private ApiInfo webApiInfo(){
    ​
            return new ApiInfoBuilder()
                    .title("网站-进行swaggerui的测试")
                    .description("学习swagger用来接口api文档 测试 ")
                    .version("1.0")
                    .build();
        }
    ​
        private ApiInfo adminApiInfo(){
    ​
            return new ApiInfoBuilder()
                    .title("网站-swaggerui测试")
                    .description("本文档用来学习swagger 接口api文档 测试")
                    .version("1.0")
                    .build();
        }
    }

    3.4 swagger-ui 常用注解

    @Api (修饰类)

    常见参数 value : 类的作用 tags : 非空时会覆盖value的值,可以在ui界面上看到 produces : 设置输出的mime类型,比如 “application/json” consumes : 设置输入的mime类型,比如 “application/json” protocols :安全协议,比如http, https authorizations : 安全声明 hidden :是否在界面上展示

    @ApiOperation(修饰方法)

    value: 方法介绍 notes:备注说明 tags : 非空时会覆盖value的值 response : 响应类型 httpMethod : 指定的http方法 responseHeaders : 响应头列表 code : 响应的http状态码 produces : 设置输出的mime类型,比如 “application/json” consumes : 设置输入的mime类型,比如 “application/json” protocols :安全协议,比如http, https authorizations : 安全声明 hidden :是否在界面上展示

    @ApiParam (接收参数)

    name : 参数名称, 和前端传递过来的保持一致 value : 参数的说明 defaultValue : 参数默认值 required : 是否必填

    @ApiModel (修饰参数对象类)

    value : 类介绍 description : 详细介绍

    @ApiModelProperty(修饰参数对象类上的具体字段)

    value : 字段含义

    package com.jpa.springdatajpatest.controller;
    ​
    import com.jpa.springdatajpatest.pojo.User;
    import com.jpa.springdatajpatest.service.UserService;
    import com.jpa.springdatajpatest.util.ResponseResult;
    import com.jpa.springdatajpatest.util.SimpleResponse;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    ​
    import java.util.List;
    ​
    /**
     * @Author
     * @Date 2022/12/2
     * @Description 类功能描述
     */
    @Controller
    @Api(tags = "用户管理测试类")
    @RequestMapping("/admin")
    public class UserController {
        @Autowired
        private UserService userService;
    ​
        public ResponseResult findAll(){
            return null;
        }
    ​
        @ApiOperation(value = "根据name查询")
        @GetMapping("/findByName")
        @ResponseBody
        public String findByName(@RequestParam("name") String name){
            User byUsername = userService.findByUsername(name);
            return byUsername.toString();
        }
    ​
        @ApiOperation(value = "查询全部")
        @GetMapping("/getAll")
        @ResponseBody
        public String getAll(){
            List all = userService.getAll();
            return all.toString();
        }
    ​
        @ApiOperation(value = "分页查询")
        @GetMapping("/pageAll")
        @ResponseBody
        public ResponseResult pageAll(@RequestParam( value = "pageNum",defaultValue = "1") Integer pageNum,
                                      @RequestParam(value = "pageSize",defaultValue = "2") Integer pageSize){
            ResponseResult responseResult=new ResponseResult();
            try {
                Page pages = userService.pages(pageNum, pageSize);
                responseResult.setData(pages);
                responseResult.setState(200);
                responseResult.setMsg("分页查询成功");
                return responseResult;
            }catch (Exception ex){
                responseResult.setState(404);
                ex.printStackTrace();
                responseResult.setMsg(ex.getMessage());
                return responseResult;
            }
        }
    ​
        @ApiOperation(value = "带条件的分页查询")
        @GetMapping("/pageAllAndLike")
        @ResponseBody
        public ResponseResult pageAllAndLike(User user,
                @RequestParam( value = "pageNum",defaultValue = "1",required = false) Integer pageNum,
                @RequestParam(value = "pageSize",defaultValue = "2",required = false) Integer pageSize
        ){
            System.out.println("=-=-=-="+user.getUsername()+"-=-="+user.getPassword());
            ResponseResult responseResult=new ResponseResult();
            try {
                Page pages = userService.pagesAndLike(user,pageNum, pageSize);
                System.out.println("---"+pages.toString());
                responseResult.setData(pages);
                responseResult.setState(200);
                responseResult.setMsg("分页查询成功");
                return responseResult;
            }catch (Exception ex){
                responseResult.setState(404);
                ex.printStackTrace();
                responseResult.setMsg(ex.getMessage());
                return responseResult;
            }
        }
    ​
        @ApiOperation(value = "删除")
        @DeleteMapping("/deleteUser")
        @ResponseBody
        public ResponseResult getAll(@RequestParam("id") Integer id){
            userService.deleteUser(id);
            ResponseResult responseResult=new ResponseResult();
            responseResult.setData(1);
            return responseResult;
        }
    ​
        @ApiOperation(value = "新增")
        @PostMapping("/save")
        @ResponseBody
        public ResponseResult save(User user){
            User save = userService.save(user);
            ResponseResult responseResult=new ResponseResult();
            responseResult.setData(save);
            return responseResult;
        }
    ​
        @ApiOperation(value = "根据name查询")
        @GetMapping("/byName")
        @ResponseBody
        public ResponseResult byName(@RequestParam("name") String name){
            User save = userService.findByName(name);
            ResponseResult responseResult=new ResponseResult();
            responseResult.setData(save);
            return responseResult;
        }
    }

    2.5 进入swagger-ui页面(http://localhost:8080/swagger-ui.html#/)

    swagger-ui,第1张

    以下的红色框内容我们可以通过6.2.3工具类进行修改 swagger-ui,第2张

    一下红框内容可以通过6.2.4swagger-ui常用注解进行修改 swagger-ui,第3张

     swagger-ui,第4张

     介绍完毕!后会有期!!!