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.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
/**
-
Created with IntelliJ IDEA.
-
@author : 村雨遥
-
@version : 1.0
-
@project : springboot-swagger3-demo
-
@package : com.cunyu.springbootswagger3demo.config
-
@className : SwaggerConfig
-
@createTime : 2022/1/6 14:19
-
@email : 747731461@qq.com
-
@微信 : cunyu1024
-
@公众号 : 村雨遥
-
@网站 : https://cunyu1943.github.io
-
@description :
*/
@Configuration
@EnableOpenApi
public class SwaggerConfig {
/**
- 用于读取配置文件 application.properties 中 swagger 属性是否开启
*/
@Value(“${swagger.enabled}”)
Boolean swaggerEnabled;
@Bean
public Docket docket() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
// 是否开启swagger
.enable(swaggerEnabled)
.select()
// 过滤条件,扫描指定路径下的文件
.apis(RequestHandlerSelectors.basePackage(“com.cunyu.springbootswagger3demo.controller”))
// 指定路径处理,PathSelectors.any()代表不过滤任何路径
//.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
/作者信息/
Contact contact = new Contact(“村雨遥”, “https://cunyu1943.github.io”, “747731461@qq.com”);
return new ApiInfo(
“Spring Boot 集成 Swagger3 测试”,
“Spring Boot 集成 Swagger3 测试接口文档”,
“v1.0”,
“https://cunyu1943.github.io”,
contact,
“Apache 2.0”,
“http://www.apache.org/licenses/LICENSE-2.0”,
new ArrayList()
);
}
}
这里的配置和 Swagger2 大同小异,这里最大的区别在于加入了从配置文件中获取 Swagger 开关的属性。这里也可以选择添加到 Swagger2 的配置类中,同样通过配置文件来控制是否开启 Swagger2。此外,还有就是 DocumentationType
属性的不同了,Swagger2 中我们使用的是 SWAGGER_2
,而在 Swagger3 中,我们使用的则是 OAS_30
。其实点进去 DocumentationType
的源码我们就可以发现,Swagger 已经是给我们定义好的,你用的是哪一个版本的 Swagger,那我们使用的属性值应该选择对应版本。三个版本的属性值对应如下:
public static final DocumentationType SWAGGER_12 = new DocumentationType(“swagger”, “1.2”);
public static final DocumentationType SWAGGER_2 = new DocumentationType(“swagger”, “2.0”);
public static final DocumentationType OAS_30 = new DocumentationType(“openApi”, “3.0”);
编写实体类
完成上面的步骤之后,我们的 Swagger 就配置好了,接下来我们就添加一个接口来看看 Swagger3 和 Swagger2 的不同。
- 新建实体类
这里我以一个用户类为实例,带有 name
、age
两个属性,也就是本文一开始项目结构截图中 entity
包下的内容。
package com.cunyu.springbootswagger3demo.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
-
Created with IntelliJ IDEA.
-
@author : 村雨遥
-
@version : 1.0
-
@project : springboot-swagger3-demo
-
@package : com.cunyu.springbootswagger3demo.entity
-
@className : User
-
@createTime : 2022/1/6 11:17
-
@email : 747731461@qq.com
-
@微信 : cunyu1024
-
@公众号 : 村雨遥
-
@网站 : https://cunyu1943.github.io
-
@description :
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(“用户实体类”)
public class User {
@ApiModelProperty(value = “姓名”, required = true, example = “村雨遥”)
private String name;
@ApiModelProperty(value = “年龄”, required = true, example = “20”)
private Integer age;
}
- 新建接口
这里写了两个接口,一个是直接传参,另一种是通过利用创建的 User
实体类来传输,也就是项目结构中 controller
包中的内容。
package com.cunyu.springbootswagger3demo.controller;
import com.cunyu.springbootswagger3demo.entity.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
-
Created with IntelliJ IDEA.
-
@author : 村雨遥
-
@version : 1.0
-
@project : springboot-swagger3-demo
-
@package : com.cunyu.springbootswagger3demo.controller
-
@className : UserController
-
@createTime : 2022/1/6 11:02
-
@email : 747731461@qq.com
-
@微信 : cunyu1024
-
@公众号 : 村雨遥
-
@网站 : https://cunyu1943.github.io
-
@description :
*/
@Api(tags = “测试”)
@RestController
@RequestMapping(“/user”)
public class UserController {
@ApiOperation(“测试接口1”)
@PostMapping(“/show1”)
public String show1(@ApiParam(value = “姓名”, required = true, example = “村雨遥”) @RequestBody String name) {
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
ActiveMQ消息中间件面试专题
- 什么是ActiveMQ?
- ActiveMQ服务器宕机怎么办?
- 丢消息怎么办?
- 持久化消息非常慢怎么办?
- 消息的不均匀消费怎么办?
- 死信队列怎么办?
- ActiveMQ中的消息重发时间间隔和重发次数吗?
ActiveMQ消息中间件面试专题解析拓展:
redis面试专题及答案
- 支持一致性哈希的客户端有哪些?
- Redis与其他key-value存储有什么不同?
- Redis的内存占用情况怎么样?
- 都有哪些办法可以降低Redis的内存使用情况呢?
- 查看Redis使用情况及状态信息用什么命令?
- Redis的内存用完了会发生什么?
- Redis是单线程的,如何提高多核CPU的利用率?
Spring面试专题及答案
- 谈谈你对 Spring 的理解
- Spring 有哪些优点?
- Spring 中的设计模式
- 怎样开启注解装配以及常用注解
- 简单介绍下 Spring bean 的生命周期
Spring面试答案解析拓展
高并发多线程面试专题
- 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
- Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
- Java 中 wait 和 sleep 方法有什么区别?
- 如何在 Java 中实现一个阻塞队列?
- 如何在 Java 中编写代码解决生产者消费者问题?
- 写一段死锁代码。你在 Java 中如何解决死锁?
高并发多线程面试解析与拓展
jvm面试专题与解析
- JVM 由哪些部分组成?
- JVM 内存划分?
- Java 的内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
- Java 中 wait 和 sleep 方法有什么区别?
- 如何在 Java 中实现一个阻塞队列?
- 如何在 Java 中编写代码解决生产者消费者问题?
- 写一段死锁代码。你在 Java 中如何解决死锁?
高并发多线程面试解析与拓展
[外链图片转存中…(img-UryVQJOK-1711081296422)]
jvm面试专题与解析
- JVM 由哪些部分组成?
- JVM 内存划分?
- Java 的内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
[外链图片转存中…(img-OiIptgYN-1711081296422)]