swagger使用指引

devtools/2025/2/5 7:32:29/

1.swagger介绍

在前后端分离开发中通常由后端程序员设计接口,完成后需要编写接口文档,最后将文档交给前端工程师,前端工程师参考文档进行开发。

可以通过一些工具快速生成接口文档 ,本项目通过Swagger生成接口在线文档 。

什么是Swagger?

OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,目前版本是V3.0,并且已经发布并开源在github上。

(GitHub - OAI/OpenAPI-Specification: The OpenAPI Specification Repository)

Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,Swagger是一个在线接口文档的生成工具,前后端开发人员依据接口文档进行开发。 (API Documentation & Design Tools for Teams | Swagger)

Spring Boot 可以集成Swagger,Swaager根据Controller类中的注解生成接口文档 ,只要添加Swagger的依赖和配置信息即可使用它。

2.引入swagger依赖

在api模块中,引入springboot集成swagger的依赖

        <!--springboot集成swagger--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId></dependency><!--swagger的版本,如果使用父模块管理是如下格式,也可以在本模块<version/>标签标注--><swagger-spring-boot-starter.version>1.9.0.RELEASE</swagger-spring-boot-starter.version>

3.添加swagger配置

在bootstrap.yml配置文件中(也可能是application.yml),引入swagger配置;

其中base-package为扫描的包路径,扫描Controller类.

swagger:title: "整个项目的名称或标志"#定制包扫描路径。配置包扫描路径description: "内容系统管理系统对课程相关信息进行管理"base-package: com.xuecheng.contentenabled: trueversion: 1.0.0

4.在启动类中添加@EnableSwagger2Doc注解

再次启动服务,工程启动起来,访问http://localhost:8800/content/swagger-ui.html查看接口信息,其中8800为项目端口号,localhost代表本机,可根据实际情况修改,后面的信息swagger-ui.html为固定信息.

5.添加接口说明注解

可以方便查看接口说明

并将定义在方法上的@RestMapping修改位对应的@Postmapping等.

添加完注解后可以方便阅读接口文档,特别是接口文档较多的情况下,提高开发效率

 @Api(value = "课程信息编辑接口",tags = "课程信息编辑接口")@RestController
public class CourseBaseInfoController {@ApiOperation("课程查询接口")@PostMapping("/course/list")public PageResult<CourseBase> list(PageParams pageParams, @RequestBody(required=false) QueryCourseParamsDto queryCourseParams){//....}
}

6.添加模型类中的属性说明注解

接口文档中会有关于接口参数的说明,在模型类上也可以添加 注解对模型类中的属性进行说明,方便对接口文档的阅读

public class PageParams {...@ApiModelProperty("当前页码")private Long pageNo = 1L;@ApiModelProperty("每页记录数默认值")private Long pageSize = 30L;
...
public class QueryCourseParamsDto {//审核状态@ApiModelProperty("审核状态")private String auditStatus;//课程名称@ApiModelProperty("课程名称")private String courseName;}

7.Swaager的常用注解如下:

在Java类中添加Swagger的注解即可生成Swagger接口,常用Swagger注解如下:

 

 8.测试

使用Swagger可以进行接口的测试。

修改接口内容,添加一些测试代码

@ApiOperation("课程查询接口")
@PostMapping("/course/list")
public PageResult<CourseBase> list(PageParams pageParams, @RequestBody(required=false) QueryCourseParamsDto queryCourseParams){CourseBase courseBase = new CourseBase();courseBase.setName("测试名称");courseBase.setCreateDate(LocalDateTime.now());List<CourseBase> courseBases = new ArrayList();courseBases.add(courseBase);PageResult pageResult = new PageResult<CourseBase>(courseBases,10,1,10);return pageResult;}

9.时间格式转换

存在一个问题就是LocalDateTime类型的数据转json后数据格式并不是我们要的年月日时分秒,提供两种方法:

9.1 使用@JsonFormat注解

先引入对应的依赖

        <!--JsonFormat--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.8.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.8</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency>

不过在springboot-starter-web中有相应的前两个依赖 

将注解添加到需要转换时间格式的相应字段上,并在pattern属性中设置需要的时间格式

    @ApiModelProperty(value = "创建时间")@TableField("create_date")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private LocalDateTime createDate;

 这里解释一下:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

   pattern:是你需要转换的时间日期的格式

   timezone:是时间设置为东八区,避免时间在转换中有误差

  提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别

完成上面两步之后,我们用对应的实体类来接收数据库查询出来的结果时就完成了时间格式的转换,再返回给前端时就是一个符合我们设置的时间格式了

@DateTimeFormat的使用和@jsonFormat差不多,首先需要引入是spring还有jodatime依赖

  <!-- joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency>

在controller层我们使用spring mvc 表单自动封装映射对象时,我们在对应的接收前台数据的对象的属性上加@DateTimeFormat 

 @DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date symstarttime;@DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date symendtime;

总结: 

  注解@JsonFormat主要是后台到前台的时间格式的转换

  注解@DateTimeFormat 主要是前后到后台的时间格式的转换

9.2 通过添加配置文件实现时间格式转换

因为这个文件可以通用,建议设置在父类工程中,config/LocalDateTimeConfig文件中:

import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;@Configuration
public class LocalDateTimeConfig {/** 序列化内容*   LocalDateTime -> String* 服务端返回给客户端内容* */@Beanpublic LocalDateTimeSerializer localDateTimeSerializer() {return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}/** 反序列化内容*   String -> LocalDateTime* 客户端传入服务端数据* */@Beanpublic LocalDateTimeDeserializer localDateTimeDeserializer() {return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}// 配置@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder -> {builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());};}}


http://www.ppmy.cn/devtools/156209.html

相关文章

数组排序算法

数组排序算法 用C语言实现的数组排序算法。 排序算法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度是否稳定适用场景QuickO(n log n)O(n)O(n log n)O(log n)不稳定大规模数据&#xff0c;通用排序BubbleO(n)O(n)O(n)O(1)稳定小规模数据&#xff0c;教学用途InsertO(n)…

实际操作 检测缺陷刀片

号he 找到目标图像的缺陷位置&#xff0c;首先思路为对图像进行预处理&#xff0c;灰度-二值化-针对图像进行轮廓分析 //定义结构元素 Mat se getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1)); morphologyEx(thre, tc, MORPH_OPEN, se, Point(-1, -1), 1); …

分布式微服务系统架构第91集:系统性能指标总结

加群联系作者vx&#xff1a;xiaoda0423 仓库地址&#xff1a;https://webvueblog.github.io/JavaPlusDoc/ 系统性能指标总结 系统性能指标包括哪些&#xff1f; 业务指标、资源指标、中间件指标、数据库指标、前端指标、稳定性指标、批量处理指标、可扩展性指标、可靠性指标。 …

制作一款将黑白照片、视频变成彩色模型

将黑白照片或视频转换为彩色&#xff08;Image/Video Colorization&#xff09;的AI模型&#xff0c;通常涉及深度学习和计算机视觉技术。以下是完整的实现流程&#xff1a; 1. 任务定义 彩色化&#xff08;Colorization&#xff09;任务的目标是&#xff1a; 输入&#xff1…

2024年MR应用深度解析:Meta商店中的游戏与非游戏应用

随着混合现实(MR)技术的不断进步,越来越多的应用开始集成这种新型交互方式。本文基于对Meta商店中部分具有代表性的MR应用的研究,探讨了游戏与非游戏类应用之间的对比分析,并深入细分每个类别下的亮点推荐。 数据收集方法 本报告聚焦于那些具备MR组件的应用程序,包括从…

DeepSeek如何微调成智能制造专用大模型?

将DeepSeek微调成智能制造专用大模型&#xff0c;关键在于结合智能制造领域的专业数据与合适的微调方法。以下是一个基于DeepSeek模型的微调案例示例&#xff0c;假设我们使用LoRA&#xff08;Low - Rank Adaptation&#xff09;技术进行高效微调。 1. 准备工作 安装依赖库 …

C++继承的基本意义

文章目录 一、继承的本质和原理二、重载、隐藏和覆盖三、基类与派生类的转换 一、继承的本质和原理 继承的本质&#xff1a;a. 代码的复用 b. 类和类之间的关系&#xff1a; 组合&#xff1a;a part of… 一部分的关系 继承&#xff1a;a kind of… 一种的关系 总结&#xff…

【华为OD-E卷 - 任务最优调度 100分(python、java、c++、js、c)】

【华为OD-E卷 - 任务最优调度 100分&#xff08;python、java、c、js、c&#xff09;】 题目 给定一个正整数数组表示待系统执行的任务列表&#xff0c;数组的每一个元素代表一个任务&#xff0c;元素的值表示该任务的类型。 请计算执行完所有任务所需的最短时间。 任务执行规…