java:一个springfox swagger2的简单例子

news2024/7/6 17:37:21

# 示例程序

【pom.xml】

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.3.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>3.0.0</version>
</dependency>

【application.properties】

server.port=8080
spring.application.name=mySwagger

management.server.port=8080
management.endpoints.web.exposure.include=*

【SwaggerConfig.java】

package com.chz.mySwagger.config;

@Configuration
public class SwaggerConfig {

    @Autowired
    private TypeResolver typeResolver;

    @Bean
    public Docket petApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .pathMapping("/")
                .directModelSubstitute(LocalDate.class, String.class)
                .genericModelSubstitutes(ResponseEntity.class)
                .alternateTypeRules(
                        newRule(
                                typeResolver.resolve(
                                    DeferredResult.class, typeResolver.resolve(ResponseEntity.class, WildcardType.class)
                                ),
                                typeResolver.resolve(WildcardType.class)
                        )
                )
                .useDefaultResponseMessages(false)
                .globalResponses(HttpMethod.GET,
                        singletonList(new ResponseBuilder()
                                .code("500")
                                .description("500 message")
                                .representation(MediaType.TEXT_XML)
                                .apply(r ->
                                        r.model(m ->
                                                m.referenceModel(ref ->
                                                        ref.key(k ->
                                                                k.qualifiedModelName(q ->
                                                                        q.namespace("some:namespace").name("ERROR")
                                                                )
                                                        )
                                                )
                                        )
                                )
                                .build()))
                .securitySchemes(singletonList(apiKey()))
                .securityContexts(singletonList(securityContext()))
                .enableUrlTemplating(true)
                .globalRequestParameters(
                        singletonList(
                                new springfox.documentation.builders.RequestParameterBuilder()
                                    .name("someGlobalParameter")
                                    .description("Description of someGlobalParameter")
                                    .in(ParameterType.QUERY)
                                    .required(true)
                                    .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)))
                                    .build()
                        )
                )
                .tags(new Tag("Pet Service", "All apis relating to pets"));
    }

    private ApiKey apiKey() {
        return new ApiKey("mykey", "api_key", "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .forPaths(PathSelectors.regex("/anyPath.*"))
                .build();
    }

    List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return singletonList(new SecurityReference("mykey", authorizationScopes));
    }

    @Bean
    SecurityConfiguration security() {
        return SecurityConfigurationBuilder.builder()
                .clientId("test-app-client-id")
                .clientSecret("test-app-client-secret")
                .realm("test-app-realm")
                .appName("test-app")
                .scopeSeparator(",")
                .additionalQueryStringParams(null)
                .useBasicAuthenticationWithAccessCodeGrant(false)
                .enableCsrfSupport(false)
                .build();
    }

    @Bean
    UiConfiguration uiConfig() {
        return UiConfigurationBuilder.builder()
                .deepLinking(true)
                .displayOperationId(false)
                .defaultModelsExpandDepth(1)
                .defaultModelExpandDepth(1)
                .defaultModelRendering(ModelRendering.EXAMPLE)
                .displayRequestDuration(false)
                .docExpansion(DocExpansion.NONE)
                .filter(false)
                .maxDisplayedTags(null)
                .operationsSorter(OperationsSorter.ALPHA)
                .showExtensions(false)
                .showCommonExtensions(false)
                .tagsSorter(TagsSorter.ALPHA)
                .supportedSubmitMethods(UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS)
                .validatorUrl(null)
                .build();
    }
}

【Test1Controller.java】

package com.chz.mySwagger.controller1;

@Api(tags="chz-Test1Controller")
@Slf4j
@RestController
@RequestMapping("/test1")
public class Test1Controller {

    @ApiOperation(value="第一个测试方法-value",notes="第一个测试方法-notes")
    @ApiImplicitParams({
            @ApiImplicitParam(name="p1",value="p1-value", defaultValue = "p1-defaultValue"),
            @ApiImplicitParam(name="p2",value="p2-value", defaultValue = "p2-defaultValue")
    })
    @ApiResponses({
            @ApiResponse(code = 200, message = "请求成功"),
    })
    @GetMapping("/test1")
    public String test1(
            @RequestParam(value = "p1")String p1,
            @RequestParam(value = "p2")String p2
    ) {
        return "test1: p1="+p1+", p2="+p2+";";
    }
}

【Test2Controller.java】

package com.chz.mySwagger.controller2;

@Api(tags="chz-Test2Controller")
@Slf4j
@RestController
@RequestMapping("/test2")
public class Test2Controller {

    @ApiOperation(value="第一个测试方法-value",notes="第一个测试方法-notes")
    @ApiImplicitParams({
            @ApiImplicitParam(name="p1",value="p1-value", defaultValue = "p1-defaultValue"),
            @ApiImplicitParam(name="p2",value="p2-value", defaultValue = "p2-defaultValue")
    })
    @ApiResponses({
            @ApiResponse(code = 200, message = "请求成功"),
    })
    @GetMapping("/test1")
    public String test1(
            @RequestParam(value = "p1")String p1,
            @RequestParam(value = "p2")String p2
    ) {
        return "test1: p1="+p1+", p2="+p2+";";
    }
}

【IndexController.java】

package com.chz.mySwagger.controller1;

@Slf4j
@Controller
@RequestMapping("/")
public class IndexController {

    @GetMapping("/")
    public String index() {
        return "redirect:/swagger-ui/index.html";
    }
}

【MySwaggerTest.java】

package com.chz.mySwagger;

@SpringBootApplication
@EnableSwagger2
@ComponentScan(basePackageClasses = {
        Test1Controller.class,
        Test2Controller.class,
})
public class MySwaggerTest {

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

启动【MySwaggerTest】,访问【http://localhost:8080/swagger-ui/index.html】
在这里插入图片描述

# 参考资料

https://springfox.github.io/springfox/docs/current/#introduction

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【每日刷题】Day61

【每日刷题】Day61 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 671. 二叉树中第二小的节点 - 力扣&#xff08;LeetCode&#xff09; 2. 2331. 计算布尔二叉树的值…

02-DHCP原理与配置

1、DHCP的工作原理 当局域网中有大量的主机时&#xff0c;如果逐个为每一台主机手动设置IP地址、默认网关、DNS服务器地址等网络参数&#xff0c;这显然是一个费力也未必讨好的办法。 而DHCP服务器的应用&#xff0c;正好可以解决这一问题。 1.1 DHCP是什么 DHCP——动态主机…

单片机多个中断源时的设计思路,(51为例)工作寄存器R0-R7

51单片机中四组工作寄存器&#xff08;R0-R7&#xff09; 参考 可以看出每个工作寄存器区有8个字节即为R0-R7&#xff0c;当不指定使用哪个工作寄存器区的时候默认0区。其他工作区作为普通的RAM使用。特殊功能寄存器中有可以位寻址和不能位寻址的区域 下面文字引用 通过修改…

ABB机器人修改IO信号的具体方法介绍

ABB机器人修改IO信号的具体方法介绍 具体步骤可从参考以下内容: 导出IO配置文件 打开【控制面板】-【配置】-【I/O System】-【文件】-【‘EIO’另存为】,就可以保存IO配置文件【EIO.cfg】用RobotStudio软件打开EIO.cfg文件在软件界面,鼠标右击,选择【I/O信号数据编辑器】选…

嵌入式八股文

C/C基础 C和C有什么区别 C是⾯向对象的语⾔&#xff0c;⽽C是⾯向过程的语⾔&#xff1b; C引⼊ new/delete 运算符&#xff0c;取代了C中的 malloc/free 库函数&#xff1b; C引⼊引⽤的概念&#xff0c;⽽C中没有&#xff1b; C引⼊类的概念&#xff0c;⽽C中没有&#xff…

2024年,计算机相关专业还值得选择吗? 又该如何判断自己是否适合这类专业呢?

文章目录 一、2024年,计算机相关专业还值得选择吗?二、判断自己是否适合这类专业呢&#xff1f;三、哪所大学的计算机专业最好&#xff1f;四、计算机专业是否仍具有长远的发展潜力和就业前景呢? 一、2024年,计算机相关专业还值得选择吗? 在2024年选择大学专业时&#xff0…

人工智能ChatGPT的多种应用:提示词工程

简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达的越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&#xff0c;如果想要 …

WWDC24Swift 6 崭新亮相,迁移至新 GitHub 组织

WWDC24 上的 Swift&#xff1a;Swift 6 崭新亮相&#xff0c;迁移至新 GitHub 组织 在今年的 WWDC24 大会上&#xff0c;苹果隆重推出了备受期待的 Swift 6 版本&#xff0c;并宣布将其迁移至全新的 GitHub 组织&#xff0c;同时庆祝 Swift 诞生十周年。 Swift 6&#xff1a…

DVWA-DC-6

靶机IP:192.168.20.140 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 nmap扫描靶机端口及版本信息 dirsearch扫目录 发现是个wordpress建站 我们去访问前端界面 存在重定向&#xff0c;修改hosts文件&#xff0c;加入192.168…

性能测试------LoadRunner 详解

性能测试------LoadRunner的使用 一、什么是LoadRunner LoadRunner是一款由Micro Focus&#xff08;以前是Hewlett-Packard或HP公司&#xff09;开发的性能测试工具。它用于测试和分析系统在负载下的行为和性能。具体来说&#xff0c;LoadRunner可以模拟数千名用户同时访问应…

大众点评全国爱车店铺POI采集177万家-2024年5月底

大众点评全国爱车店铺POI采集177万家-2024年5月底 店铺POI点位示例&#xff1a; 店铺id H69Y6l1Ixs2jLGg2 店铺名称 HEEJOO豪爵足道(伍家店) 十分制服务评分 7.7 十分制环境评分 7.7 十分制划算评分 7.7 人均价格 134 评价数量 2982 店铺地址 桔城路2号盛景商业广场1-3…

命令模式:灯开灯关

文章目录 UML类图Command接口Invoker.javaLight.javaOnLightCommand.javaTest.java运行结果位置 UML类图 Command接口 这个你会&#xff0c;只有一个方法&#xff0c;并且接口里面是抽象方法 package mlms; /*- 这个你会&#xff0c;只有一个方法&#xff0c;并且接口里面是抽…

MMdeploy在cuda+tensorrt下的配置和编译

MMdeploy在cudatensorrt下的配置和编译 Python安装配置MMdeploy配置openmmlab系列从工程安装mmdeploy MMdeploy_runtime以及demo编译安装量化编译runtime和demo Python安装配置MMdeploy 配置openmmlab系列 pip install -U openmim如果mim命令遭遇故障&#xff0c;或者安装失败…

联想电脑电池只能充到80%,就不在充电了,猛一看以为坏了,只是设置了养护模式。

现在电池管理模式有三种&#xff1a; 1&#xff09;常规 2&#xff09;养护 3&#xff09;快充 好久没有用联想的电脑了&#xff0c;猛一看&#xff0c;咱充到了80%不充了&#xff0c;难道电池是坏的&#xff1f;我们要如何设置才可以让其充电到100%呢&#xff1f; 右下角…

Tessy学习系列(四):组件测试——官方例程interior_light

一、新建工程 &#xff08;1&#xff09;新建工程 注意&#xff1a;路径不能包含空格与中文 &#xff08;2&#xff09;新建测试集 &#xff08;3&#xff09;新建组件测试模块 &#xff08;4&#xff09;设置测试模块为组件测试模块 二、导入源码 &#xff08;1&#xff09…

DC入门篇——read和analyzeelaborate的区别

引言 DC读入设计文件有两种方式&#xff0c;一是read指令&#xff0c;二是 analyze&elaborate 的组合。下文将介绍两者的异同。 read 具体为 read -format verilog[db,vhdl...] file #dcsh model read_db file.db #tcl model read_verilog fil…

5.4 安全策略和控制 方法实现探讨

安全策略概述: 定义 安全策略是一组规则和措施&#xff0c;旨在保护组织的信息和资产免受潜在的威胁和攻击。它的制定和实施需要考虑组织的特定需求和风险&#xff0c;并采取适当的措施来减少潜在的安全漏洞。安全策略的定义包括以下几个方面&#xff1a; 1. 目标和范围&…

【Vue】Vuex概述

文章目录 一、使用场景二、优势三、注意 官网&#xff1a;https://vuex.vuejs.org/zh/ Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 工具可以直接理解成插件 大白话&#xff1a;Vuex 是一个插件&#xff0c;可以帮我们管理 Vue 通用的数据 (多组件共享的数据)…

信息学奥赛初赛天天练-26-CSP-J2023基础题攻略,组合数学、高精度算法、计算机存储奥秘与操作系统实践

PDF文档公众号回复关键字:20240611 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 6 小明在某一天中依次有七个空闲时间段&#xff0c;他想要选出至少一个空闲时间段来练习唱歌&#xff0c;但他希…

NOSQL -- ES

第三个我们比较常用的NOSQL类型的数据库 --- ES 介绍: ES的全称(Elasticsearch) ES是一个分布式全文搜索的引擎 也就是我们平常在购物, 搜索东西的时候常用的, 就是一个ES的类型, 分布式全文搜索引擎 查询原理: 1>分词: 在查询之前, 其会将一些数据拆分开, 按照词进行拆分…