SpringBoot整合Swagger3.0

news/2024/11/24 18:51:49/

SpringBoot整合Swagger3.0

SpringBoot整合Swagger3.0

引入pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.young</groupId><artifactId>swagger03</artifactId><version>1.0-SNAPSHOT</version><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.0</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></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></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency></dependencies><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties></project>

在启动类加上@EnableOpi注解

package com.young;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.oas.annotations.EnableOpenApi;@SpringBootApplication
@EnableOpenApi
public class Swagger03Application {public static void main(String[] args) {SpringApplication.run(Swagger03Application.class,args);}
}

Swagger3和Swagger2的注解对比
在这里插入图片描述

在dto类里面,使用schema来描述类的信息和类的属性

package com.young.entity;import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;@Data
@Schema(description = "用户类")
public class User {@Schema(description = "用户id")private String id;@Schema(description = "用户姓名")private String name;@Schema(description = "用户年龄")private String age;
}

controller层,用@Tag注解描述这个controller类的具体功能,然后@Operation注解描述某个方法的具体功能,@Parameters用来记录方法中需要的参数,每个参数的含义。

package com.young.controller;import com.young.entity.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
@Tag(name = "用户管理")
public class UserController {@Operation(summary = "根据用户id获取用户",tags = "用户管理")@Parameters({@Parameter(name = "id",description = "用户id")})@GetMapping("/{id}")public User getUserById(@PathVariable("id")String id){User user=new User();user.setId(id);user.setName("hello");user.setAge("0");return user;}
}

Swagger3的配置类

package com.young.config;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.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;@Configuration
public class Swagger03Config {@Beanpublic Docket createDocket(){return new Docket(DocumentationType.OAS_30).enable(true) //是否开启OpenApi.apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.young.controller")) //指定要扫描的包.paths(PathSelectors.any()).build();}private ApiInfo apiInfo(){return new ApiInfoBuilder().title("未来先遣者").contact(new Contact("沉河不浮","https://blog.csdn.net/weixin_55850954","2827523200@qq.com")).description("记录SpringBoot整合Swagger3").license("Apache2.0").licenseUrl("https://localhost:apache").build();}
}

application.yml

spring:mvc:pathmatch:matching-strategy: ant_path_matcher #这里一定要设置,因为swagger-ui默认使用的是ant_path_matcher
springfox:documentation:swagger-ui:enabled: truebase-url: /documentation #这里可以设置访问的路径

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

SpringBoot整合Swagger和SpringSecurity

在pom.xml里添加springSecurity的依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

重启项目,然后重新访问接口文档,发现被拦截了
在这里插入图片描述
我们配置Security的配置类,来解除对接口文档访问的拦截

package com.young.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http)throws Exception{http.authorizeRequests().antMatchers("/static/**","/swagger-resources/**","/documentation/**", //因为刚才在application.yml里面设置baseUrl为documentation,所以要加上这个"/v2/**","/v3/**","/swagger-ui/**","**/upload/**","/index.jsp").permitAll().anyRequest().authenticated();}
}

再次访问接口文档:
在这里插入图片描述

注意

在开发环境中,可以使用Swagger方便前后端对接,但在线上环境,不应该让用户访问到我们的接口文档,因此上线时,要把swagger接口文档关闭

参考文章:

Swagger3注解使用(OpenApi3)


http://www.ppmy.cn/news/99479.html

相关文章

【chatGPT】使用ChatGPT进行工作提效

参加新星计划2023【使用ChatGPT进行工作提效】记录的写笔记&#xff01; 借助ChatGPT自动制作PPT&#xff1a;https://blog.csdn.net/Catherinemin/article/details/130846117 ChatgGPT生成Excel统计公式&#xff1a;https://blog.csdn.net/Catherinemin/article/details/13085…

DJ6-6/7 文件共享和访问控制、文件保护

目录 6.6 文件共享和访问控制 1、同时存取 2、存取权限 3、文件共享的实现 6.6.1 基于索引结点的共享方式 1、基本思想 2、具体操作 6.6.2 利用符号链接实现文件共享 6.6.3 利用 URL 实现文件共享 6.7 文件保护 6.6 文件共享和访问控制 文件共享的有效控制涉及…

@Autowired 和 @Resource的区别只知道注入方式不同?那可不行,其性能上也有差距!

目录 Autowire vs Resource 性能比较 先上结论&#xff1a; Resource查找Bean的时间复杂度为O(1)&#xff1a; Autowired查找Bean的时间复杂度为O(n)&#xff1a; 不能将所有的Resource无脑替换成Autowired 结合源码分析Autowire vs Resource 性能比较 Autowire注解的处…

javascript基础九:说说Javascript中的继承?如何实现继承?

一、是什么 继承&#xff08;inheritance&#xff09;是面向对象软件技术当中的一个概念 如果一个类别B“继承自”另一个类别A&#xff0c;就把这个B称为“A的子类”&#xff0c;而把A称为“B的父类别”也可以称“A是B的超类” 继承的优点 继承可以使得子类具有父类别的各种属性…

C++面试难点系列-左右值/const引用

C面试难点系列-左右值/const引用 简介左右值概念取地址 引用分类左值引用右值引用const 引用 右值引用存在的意义 简介 做一个简单的开篇&#xff0c;这部分主要介绍的是C面试中经常会遇到的难点&#xff0c;左右值引用和const引用。后续还会讲一些其他的C需要掌握&#xff0c…

数据等级划分

数据大致可以分为定性数据与定量数据&#xff0c;但细分可以分为四类&#xff1a;定类数据、定序数据、定距数据、定比数据 处理数据的流程&#xff1a; 参考&#xff1a; 特征工程入门与实践

Linux进程概念引入

文章目录 冯诺依曼体系操作系统概念设计目的定位系统调用和库函数的概念 进程概念描述进程PCBtask_struct内容分类 组织进程查看进程通过系统调用获取进程标识符通过系统调用创建进程 冯诺依曼体系 目前我们的计算机基本都是遵守冯诺依曼体系的&#xff0c;在冯诺依曼体系中&am…

信号处理与分析-卷积的性质与推导

目录 一、引言 二、信号分析中的卷积 1. 什么是卷积 2. 卷积的性质 3. 卷积的应用 三、离散卷积 1. 离散卷积的定义 2. 离散卷积的计算 3. 离散卷积的性质 四、连续卷积 五、卷积的实际应用 六、总结 一、引言 在信号处理中&#xff0c;卷积是一种非常重要的数学运…