springboot集成swagger3+swagger-bootstrap-ui及使用详解

2023-11-12

1、引入 maven 依赖

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

2、配置 swagger

@EnableOpenApi
@Configuration
public class Swagger3Config {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.OAS_30)
                .securityContexts(securityContexts())
                .securitySchemes(securitySchemes())
                .apiInfo(builderApiInfo())
                .select()
                // 扫描所有带有 @ApiOperation 注解的类
                .apis( RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // 扫描所有的 controller
//                .apis(RequestHandlerSelectors.basePackage("com.shenlanbao.product.library.management.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo builderApiInfo() {
        return   new ApiInfoBuilder()
                .contact(
                        new Contact(
                                "系统名称",
                                "系统地址(https://www.baidu.com)",
                                "邮箱地址(123456@163.com)"
                        )
                )
                .title("xxx项目接口文档")
                .description("xxxx项目接口文档")
                .version("1.0")
                .build();
    }

    /**
     * 配置请求头 token
     */
    private List<SecurityContext> securityContexts(){
        return Arrays.asList(SecurityContext.builder()
                .securityReferences(Arrays.asList(SecurityReference.builder()
                        .reference("token")
                        .scopes(new AuthorizationScope[]{new AuthorizationScope("global", "accessEverything")})
                        .build())).build());
    }

    /**
     * 配置请求头 token 参数
     */
    private List<SecurityScheme> securitySchemes(){
        return Arrays.asList(new ApiKey("token凭证", "token", "header"));
    }

}

其中 securityContexts() 与 securitySchemes() 是全局设置请求头参数,如不需要,则可以去掉。

3、拦截器放行(如没有拦截器,此步骤可忽略)

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private AuthInterceptor addPathPatterns;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 排除 swagger 访问的路径配置
        String[] swaggerExcludes = new String[]{
                "/swagger-ui/**",
                "/swagger-resources/**",
                "/webjars/**",
                "/v3/**",
                "/doc.html",
        };
        // 添加拦截器,配置拦截地址
        registry.addInterceptor(addPathPatterns)
                .addPathPatterns("/**")
                .excludePathPatterns(swaggerExcludes);
    }
}

4、访问

Swagger 访问路径: 地址/swagger-ui/index.html
	如:http://localhost:8180/swagger-ui/index.html
	
bootstrap-ui 访问地址:地址/doc.html
	如:http://localhost:8180/doc.html

5、使用详解

5.1 @Api

作用:在请求的类上添加该注解,表示对类的说明
参数:
tags=“说明该类的作用,可以在UI界面上看到的注解”
value=“也是说明该类的作用,可用用tags代替”
示例:

@Api(value = "疾病管理")
@RestController
public class DiseaseController {
	......
}

5.2 @ApiOperation

作用:在请求的方法上添加该注解,说明方法的用途、作用
参数:
value=“说明方法的用途、作用”
notes=“方法的备注说明”
示例:

   	@ApiOperation(value = "疾病列表(包含疾病程度)")
    @ApiImplicitParams({
                    @ApiImplicitParam(name = "labelId",value = "疾病标签ID",dataType = "String",paramType = "query",required = false),
                    @ApiImplicitParam(name = "diseaseStatus",value = "疾病状态",dataType = "String",paramType = "query",required = false),
                    @ApiImplicitParam(name = "intelligentUnderwritingId",value = "智能核保ID",dataType = "String",paramType = "query",required = false)
            })
    @GetMapping
    public Result<List<DiseaseListVO>> diseaseListAndLevel(@RequestParam(value = "labelId",required = false)String labelId,
                                                   @RequestParam(value = "diseaseStatus",required = false) String diseaseStatus,
                                                   @RequestParam(value = "intelligentUnderwritingId",required = false) String intelligentUnderwritingId) {
        return ResultUtils.success(tbDiseaseService.selectListAndLevel(labelId,diseaseStatus,intelligentUnderwritingId));
    }

5.3 @ApiImplicitParams 与 @ApiImplicitParam

作用:
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
注意 : 一般使用在GET请求中
参数:
@ApiImplicitParams 参数:@ApiImplicitParam
@ApiImplicitParam 参数:
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方

  • header --> 请求参数的获取:@RequestHeader
  • query --> 请求参数的获取:@RequestParam
  • path(用于restful接口)–> 请求参数的获取:@PathVariable
  • div(不常用)
  • form(不常用)

dataType:参数类型,默认String,其它值dataType=“Integer”
defaultValue:参数的默认值

示例如 5.2 所示。

5.4 @ApiResponses 与 @ApiResponse (一般情况无需设置)

作用:
@ApiResponses:用在请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
参数:
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
示例:

    @ApiOperation(value = "疾病列表(无疾病程度)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "labelId",value = "疾病标签ID",dataType = "String",paramType = "query",required = false),
            @ApiImplicitParam(name = "diseaseStatus",value = "疾病状态",dataType = "String",paramType = "query",required = false),
            @ApiImplicitParam(name = "intelligentUnderwritingId",value = "智能核保ID",dataType = "String",paramType = "query",required = false)
    })
    @ApiResponses(
            {
            @ApiResponse(code = 400,message = "请求失败"),
            @ApiResponse(code = 200,message = "请求成功"),
        }
    )
    @GetMapping("/list")
    public Result<List<DiseaseListVO>> diseaseList(@RequestParam(value = "labelId",required = false)String labelId,
                                                   @RequestParam(value = "diseaseStatus",required = false) String diseaseStatus,
                                                   @RequestParam(value = "intelligentUnderwritingId",required = false) String intelligentUnderwritingId) {
        return ResultUtils.success(tbDiseaseService.selectList(labelId,diseaseStatus,intelligentUnderwritingId));
    }

5.5 @ApiModel 与 @ApiModelProperty

作用:
@ApiModel:用于响应类上,表示一个返回响应数据的信息
@ApiModelProperty:用在属性上,描述响应类的属性
示例:

@ApiModel(value = "疾病详情实体")
@Data
public class DiseaseDetailDTO {

    @ApiModelProperty("疾病id")
    private String diseaseId;

    @ApiModelProperty("疾病描述")
    private String diseaseDesc;

    @ApiModelProperty("疾病别名集合")
    private List<DiseaseAliasNameDTO> aliasNameList;
}

至此,swagger 常用的知识点到此为止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot集成swagger3+swagger-bootstrap-ui及使用详解 的相关文章

  • 具有更高可见性的重写方法是良好的实践吗?

    回答这个问题 如何使用 GUI 使用 PaintComponent 初始化 GUI 然后添加基于鼠标的 GUI https stackoverflow com questions 21336141 how to gui using pain
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐