springboot整合swagger

1)简介:

作为后端开放人员,最烦的事就是自己写接口文档和别人没有写接口文档,不管是前端还是后端开发,多多少少都会被接口文档所折磨,前端会抱怨后端没有及时更新接口文档,而后端又会觉得编写接口文档太过麻烦。

Swagger 可以较好的解决接口文档的交互问题,以一套标准的规范定义接口以及相关的信息,就能做到生成各种格式的接口文档,生成多种语言和客户端和服务端的代码,以及在线接口调试页面等等。只需要更新 Swagger 描述文件,就能自动生成接口文档,做到前端、后端联调接口文档的及时性和便利性。

Swagger是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

2)优势:

  • 支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。

  • 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。

3)SpringBoot整合Swagger

1.pom.xml的properties便签中加入以下代码

   <properties><swagger.versiion>3.0.0</swagger.versiion></properties>

2.在pom.xml的dependencies标签中添加Swagger依赖

        <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>${swagger.versiion}</version></dependency>

 3.创建config包,在config包下添加Swagger配置类

package com.cqh.config;import io.swagger.annotations.ApiOperation;
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 springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
//@EnableSwagger2
@EnableOpenApi
public class SwaggerConfig {@Beanpublic Docket productApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())// 为api选择启动生成器.select()// 指定要生成api文档的根包.apis(RequestHandlerSelectors.basePackage("com.cqh.controller"))  //添加ApiOperiation注解的被扫描.paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder()// 文档标题.title("项目测试")// 简介.description("测试练习")// 作者信息:作者姓名、作者地址、作者邮箱.contact(new Contact("cqh","https://www.cqh.com","666666.@qq.com")).version("1.0").build();}}

浏览器访问http://localhost:8080/swagger-ui/#/ 

如果出现

pom.xml中 加上

         <dependency><groupId>org.springframework.plugin</groupId><artifactId>spring-plugin-core</artifactId><version>2.0.0.RELEASE</version></dependency>

4)添加文档内容

在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,描述的主要来源是函数的命名,通常需要自己增加一些说明来丰富文档内容。

Swagger使用的注解及其说明:

@Api:用在类上,说明该类的作用。

@ApiOperation:注解来给API增加方法说明。

@ApiParam:定义在参数上

@ApiResponses:用于表示一组响应

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

@ApiModel:描述一个Model的信息

l @ApiModelProperty:描述一个model的属性

案例

1.数据库导入

# Host: localhost  (Version 5.7.23-log)
# Date: 2023-12-05 13:26:01
# Generator: MySQL-Front 6.0  (Build 2.20)#
# Structure for table "account_info"
#CREATE TABLE `account_info` (`account` varchar(11) NOT NULL COMMENT '用户账号,主键',`acc_name` varchar(50) NOT NULL COMMENT '用户姓名',`password` varchar(255) NOT NULL COMMENT '鐢ㄦ埛瀵嗙爜锛岄粯璁ゆ墜鏈哄彿鍚?浣?',`acc_phone` varchar(11) NOT NULL COMMENT '手机号11位,唯一',`is_enable` tinyint(1) NOT NULL COMMENT '是否启用(1:启用,0:未启用)',`create_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NOT NULL COMMENT '更新时间',PRIMARY KEY (`account`),UNIQUE KEY `uk_phone` (`acc_phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;#
# Data for table "account_info"
#INSERT INTO `account_info` VALUES ('YZ0001','admin','92159b1631dae48aa523875174e3ea60','13811345670',1,'2023-08-18 11:34:28','2023-08-18 11:34:28'),('YZ0002','admin','986fa807bbe0c721702868bae6ef8a33','13811345679',1,'2023-08-18 11:34:38','2023-08-18 11:34:38'),('YZ0003','admin2','7d839f278639a38b2ba83ad67ab836a2','13811345677',1,'2023-08-18 14:46:05','2023-08-18 14:46:05'),('YZ0004','admin2','35ea60fd301a3895245aff0ca4947d9e','13811345674',1,'2023-08-18 15:03:12','2023-08-18 15:03:12');
2.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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cqh</groupId><artifactId>springboot1129</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot1129</name><description>springboot1129</description><properties><java.version>8</java.version><swagger.versiion>3.0.0</swagger.versiion></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>${swagger.versiion}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.plugin</groupId><artifactId>spring-plugin-core</artifactId><version>2.0.0.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3.数据库连接配置


spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/ssmlmh?serverTimezone=Asia/Shanghai&characterEncoding=utf-8username: rootpassword: rootmybatis:mapper-locations: classpath*:mapper/*.xmltype-aliases-package: com.cqh.entity
4.创建实体类

package com.cqh.entity;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
@ApiModel(value = "AccountInfoVo",description = "人员账号信息"
)
public class AccountInfo {@ApiModelProperty(value = "登录账号")private String account;@ApiModelProperty(value = "人员名称")private String accName;@ApiModelProperty(value = "登陆密码")private String password;public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getAccName() {return accName;}public void setAccName(String accName) {this.accName = accName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "AccountInfo{" +"account='" + account + '\'' +", accName='" + accName + '\'' +", password='" + password + '\'' +'}';}
}
5. swagger配置类也不能忘记

package com.cqh.config;import io.swagger.annotations.ApiOperation;
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 springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
//@EnableSwagger2
@EnableOpenApi
public class SwaggerConfig {@Beanpublic Docket productApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())// 为api选择启动生成器.select()// 指定要生成api文档的根包.apis(RequestHandlerSelectors.basePackage("com.cqh.controller"))  //添加ApiOperiation注解的被扫描.paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder()// 文档标题.title("项目测试")// 简介.description("测试练习")// 作者信息:作者姓名、作者地址、作者邮箱.contact(new Contact("cqh","https://www.cqh.com","666666.@qq.com")).version("1.0").build();}}

6.mapper配置文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cqh.mapper.AccountInfoMapper"><select id="selectAll" parameterType="String" resultType="com.cqh.entity.AccountInfo">SELECT account,acc_Name AS accName,password FROM account_info</select><select id="selectByName" parameterType="String" resultType="com.cqh.entity.AccountInfo">SELECT account, acc_Name AS accName, passwordFROM account_infoWHERE acc_name LIKE CONCAT('%', #{accName}, '%');</select>
</mapper>

7.mapper接口

package com.cqh.mapper;import com.cqh.entity.AccountInfo;import java.util.List;public interface AccountInfoMapper {List<AccountInfo> selectAll();List<AccountInfo> selectByName(String accName);
}

 8.service层接口

package com.cqh.service;import com.cqh.entity.AccountInfo;import java.util.List;public interface AccountService {List<AccountInfo> selectAll();
//改一下返回类型List<AccountInfo> selectByName(String accName);
}

9.service实现类 

package com.cqh.service.impl;import com.cqh.entity.AccountInfo;
import com.cqh.mapper.AccountInfoMapper;
import com.cqh.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountInfoMapper accountInfoMapper;@Overridepublic List<AccountInfo> selectAll() {return accountInfoMapper.selectAll();}@Overridepublic List<AccountInfo> selectByName(String accName) {return accountInfoMapper.selectByName(accName);}
}
 10.控制器层

package com.cqh.controller;import com.cqh.entity.AccountInfo;
import com.cqh.service.AccountService;import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
@Api(value = "积分等级管理",tags = {"人员信息"})
public class AccountInfoController {@Autowiredprivate AccountService accountService;@GetMapping("/getByName/{accName}")@ApiOperation("根据账号查询人员信息")public List<AccountInfo> getById(@ApiParam(value = "要查询的账号",required = true,example = "1") @PathVariable String accName){return accountService.selectByName(accName);}
}
 11.浏览器访问

http://localhost:8080/swagger-ui/#/

12.找到要测试的接口

13.点击ty it out 

14.输入要查询的类容
 15.点击执行

16.查看执行结果

Swagger2美化页面

添加依赖

        <dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency>

启动项目,访问http://localhost:8080/doc.html

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类与对象(下)

本文目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5. 匿名对象6. 拷贝对象时的一些编译器优化7. 再次理解类和对象 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&am…

配电箱安全检查

配电箱怎么检查&#xff0c;如何识破电箱安全隐患&#xff1f; &#xff08;1&#xff09;一物一码&#xff1a;每个配电箱都有独一无二标识二维码&#xff0c;巡检人员到达现场扫码即可填写巡检记录&#xff0c;查看配电箱的参数、负责人、操作规则等信息&#xff1b; &#x…

(新手必看)自定义数据传输通信协议+STM32代码详解

前言 本篇博客主要学习和了解一些单片机协议的格式&#xff0c;在对传输大数据或者要求准确性的时候&#xff0c;都需要通过协议来发送接收&#xff0c;下面通过了解协议的基本构成和代码来分析和实现协议的发送和接收。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联…

MyBatisPlus简介

1 简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 2、特性 无侵入 只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑…

淡化了技术指标 还能做现货黄金交易?

技术指标是分析和预测现货黄金走势的其中一种方法&#xff0c;普通投资者多数依赖技术指标为自己的交易做判断。然而&#xff0c;近几年有一种观点认为&#xff0c;我们应该淡化技术指标&#xff0c;少使用或者不用技术分析来服务我们的交易。这个观点引起了不少投资者的思考&a…

Adobe的3D建模工具Substance 3D Painter 9.1.1 版本下载与安装

目录 前言一、Substance 3D Painter 9.1.1安装二、使用配置总结 前言 Adobe的Substance 3D Painter是一款强大的3D建模和纹理创建工具&#xff0c;专为数字艺术家设计&#xff0c;尤其是3D画家、游戏设计师和视觉特效艺术家。注&#xff1a;文末附有下载链接&#xff01; 这款…

关于Android studio新版本和NEW UI显示返回按钮的设置

1.新版Android studio问题 因为在新版本的Android Studio中&#xff0c;默认情况下是没有直接的选项来显示返回上一步按钮在状态栏上的&#xff0c;可以通过以下方法来实现返回上一步的功能&#xff1a; 在Android Studio的顶部菜单栏中&#xff0c;选择"View"。在…

剑指offer(C++)-JZ49:丑数(算法-其他)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 把只包含质因子2、3和5的数称作丑数&#xff08;Ugly Number&#xff09;。例如6、8都是丑数&#xff0c;…

Shell函数数组练习

1、编写函数&#xff0c;实现打印绿色OK和红色FAILED&#xff0c;判断是否有参数&#xff0c;存在为Ok&#xff0c;不存在为FAILED [rootshell ~]# vim ok.sh #!/bin/bash read -p "请输入一个参数:" i function ok…

DNF 单机联网 搭建教程(附视频)

更多游戏搭建&pvf修改教程请见: DNF教程 注意&#xff1a;请不要将游戏进行商业化&#xff0c;一切后果概不负责。仅供单机&#xff0c;好友之间进行娱乐&#xff01;&#xff01; 注意&#xff1a;请不要将游戏进行商业化&#xff0c;一切后果概不负责。仅供单机&#…

SiteGround如何设置WordPress网站自动更新

SiteGround Autoupdate功能会自动帮我们更新在他们这里托管的所有WordPress网站&#xff0c;这样做是为了保证网站安全&#xff0c;并且让它们一直保持最新状态。他们会根据我们选择的设置自动更新不同版本的WordPress&#xff0c;包括主要版本和次要版本。在每次自动更新之前&…

计算机循环神经网络(RNN)

计算机循环神经网络&#xff08;RNN&#xff09; 一、引言 循环神经网络&#xff08;RNN&#xff09;是一种常见的深度学习模型&#xff0c;适用于处理序列数据&#xff0c;如文本、语音、时间序列等。RNN通过捕捉序列数据中的时间依赖关系和上下文信息&#xff0c;能够解决很…