【每天学一点-01】 在SpringBoot项目中使用Swagger2
今天在做毕设的时候,发现在前后端分离的情况下,去调用接口数据时很不方便,然后回想过去,和同学一起做项目的时候,他负责后端,我负责前端,当时调用他的弄好的接口可以说是非常方便,主要是可以通过UI页面直接对接口数据进行测试,清楚接口的返回数据类型、状态码、请求地址等等。今天就来学习一下这个接口文档生成工具Swagger。
一、首先介绍一下Swagger
Swagger是一款RESTFUL(RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。)接口的文档在线自动生成和功能测试的工具。我觉得Swagger可以缓解前端和后端人员产生肢体冲突>_<
二、结合SpringBoot项目的使用
1、首先在项目Maven中添加Swagger的依赖
疑惑1:springfox是什么?用来干什么的?
回答:springfox由swagger-springmvc发展而来,springfox是集成swagger的生态,springfox是扫描注解的代码提取信息自动生成API文档的工具,通过Swagger-UI来呈现API文档,相对于spring将swagger结合自身推出的工具,spring-swagger和swagger一样,前者更适用于Spring项目。
疑惑2:swagger-ui是什么?用来干什么的?
回答:swagger-ui就是接口文档的界面,用来展示接口数据、测试接口数据、显示描述接口信息等等。以前要测试接口需要去浏览器地址栏输入或者手写HTML页面,通过表单提交访问,其中如果还有请求参数的话,GET还需要&xx=xx?xx=xx,POST请求还需要表单等等,总而言之非常麻烦,有了swagger-ui,不用手动搭建这些提交必备的条件,直接在UI页面输入参数点点点就可以看见结果了。
【pom.xml配置文件】
- <!--Swagger-->
- <dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-swagger2</artifactId>
- <version>2.9.2</version>
- </dependency>
- <dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-swagger-ui</artifactId>
- <version>2.9.2</version>
- </dependency>
注意:这里使用的是Swagger-2.9.2版本,SpringBoot-2.5.6版本以上会报错,需要使用SpringBoot-2.5.6或者以下版本。(我是使用的是SpringBoot-2.5.6哒)
2、在项目中创建一个swagger2配置类
话不多说直接附上代码
- @Configuration //配置类
- @EnableSwagger2 //开启Swagger的自动配置
- public class Swagger2UiConfiguration{
- @Bean //配置docket以配置Swagger具体参数
- public Docket docket(){
- return new Docket(DocumentationType.SWAGGER_2)
- .apiInfo(apiInfo()) //添加Swagger信息,在下面哦
- .select()
- .apis(RequestHandlerSelectors.basePackage("com.cn.edu.hziee.controller")) //接口AIP路径,也就是控制器所在包路径
- .paths(PathSelectors.any()) //选择路径
- .build(); //构建,出发!
- }
- //配置Swagger信息 apiInfo
- private ApiInfo apiInfo(){
- //作者信息(名字,博客地址,邮箱)
- Contact contact = new Contact("Rootkital","https://www.cnblogs.com/Rootkital/","bbang98@foxmail.com");
- return new ApiInfo(
- "健身房会员管理系统接口文档", //文档说明
- "接口文档",
- "1.0.0", //版本
- "https://www.cnblogs.com/Rootkital/",
- contact, //联系人
- "Apache 2.0",
- "http://www.apache.org/licenses/LICENSE-2.0", //协议
- new ArrayList<VendorExtension>());
- }
- }
3、在controller中使用注解
swagger2配置类写好后,接下来就是将注解写在controller类中,话不多说,直接上代码
- package com.cn.edu.hziee.controller;
- import com.cn.edu.hziee.entity.Member;
- import com.cn.edu.hziee.service.MemberService;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import io.swagger.annotations.ApiResponse;
- import io.swagger.annotations.ApiResponses;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.http.HttpServletRequest;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
//@Api:请求类注解- @Api(value = "",tags="MemberController",description="会员CRUD",hidden = true) //tags:接口命名,description:描述,hideen:是否隐藏
- @ApiResponses(value = { //接口返回信息
- @ApiResponse(code = 200, message = "success!"), //code:状态码,message:状态码描述
- @ApiResponse(code = 401, message = "not authorized!"),
- @ApiResponse(code = 403, message = "forbidden!"),
- @ApiResponse(code = 404, message = "not found!")
- })
- @CrossOrigin //全跨域
- @RequestMapping("/member")
- @Controller
- public class MemberController {
- @Autowired
- MemberService memberService;
- /*选项模糊查询*/
- @ApiOperation(value = "模糊查询会员,以列表形式返回会员信息", //@ApiOperation:请求方法注解
- responseContainer = "Map", //返回类型
- response = Member.class, //返回参数对应的实体类Bean
- tags = "getMembersByKey") //请求方法名
- @PostMapping
- @ResponseBody //@RequestParam:请求的参数
- public List<Member> getMemberListByKey(@RequestParam("searchOption")String searchOption,@RequestParam("searchKey")String searchKey){
- List<Member> members = new ArrayList<Member>();
- members = memberService.searchMember("member_" + searchOption,searchKey);
- return members;
- }
- /*获取全部会员*/
- @RequestMapping(value = "getMemberList",method = RequestMethod.POST)
- @ResponseBody
- public Map<String, Object> getMemberList(HttpServletRequest request){
- Map<String,Object> map = new HashMap<>();
- List<Member> members = new ArrayList<Member>();
- members = memberService.getMemberList();
- map.put("code",0);
- map.put("msg","获取全部会员");
- map.put("count",members.size());
- map.put("data",members);
- return map;
- }
- }
4、在实体类中使用注解
请求对象注解:
在实体类/Bean/POJO中使用注解,代码如下
- @ApiModel(description = "会员实体类",value = "会员对象") //description:描述,value:字段说明
- public class Member {
- /*
- * 编号;主键
- * */
- @ApiModelProperty(name="member_id",required = true,value = "编号;主键") //name:字段说明,name:名称,required:是否必填
- private int member_id;
- }
5、运行SpringBoot项目,访问swagger-ui
地址:http://localhost:8080/swagger-ui.html
5.1、页面显示如下
5.2、页面与配置类中的对应关系
5.3、与controller类中注解的对应关系
5.4、与实体类中注解的对应关系
5.5、最后来测试一下接口
三、总结
其实这里除开swagger-ui原本的样式,还有swagger-bootstrap-ui、Layui-ui、mg-ui,有很多接口文档界面风格可选择,大致用法差不多,可以自行百度使用方法。
搜索
复制
【每天学一点-01】 在SpringBoot项目中使用Swagger2的更多相关文章
- SpringBoot项目中使用swagger2暴露resftul接口增加JWT来进行安全性验证
首先推荐两篇文章: 关于保护RestAPI的一些介绍: http://www.jianshu.com/p/6307c89fe3fa token与session的一些区别漫谈: http://www.j ...
- SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL
1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...
- 在SpringBoot项目中添加logback的MDC
在SpringBoot项目中添加logback的MDC 先看下MDC是什么 Mapped Diagnostic Context,用于打LOG时跟踪一个“会话“.一个”事务“.举例,有一个web ...
- 自身使用的springboot项目中比较全的pom.xml
在学习的时候常建新的项目,mark下商用的jar <dependency> <groupId>org.mybatis</groupId> <artifactI ...
- springboot 项目中获取默认注入的序列化对象 ObjectMapper
在 springboot 项目中使用 @SpringBootApplication 会自动标记 @EnableAutoConfiguration 在接口中经常需要使用时间类型,Date ,如果想要格式 ...
- springboot项目中js、css静态文件路径访问
springboot静态文件访问的问题,相信大家也有遇到这个问题,如下图项目结构. 项目结构如上所示,静态页面引入js.css如下所示. 大家肯定都是这样写的,但是运行的话就是出不来效果,图片也不显示 ...
- 解决springboot项目中@Value注解参数值为null的问题
1.错误场景: springboot项目中在.properties文件(.yml)文件中配置了属性值,在Bean中使用@Value注解引入该属性,Bean的构造器中使用该属性进行初始化,此时有可能会出 ...
- springboot项目中引用其他springboot项目jar
1. 剔除要引入的springboot项目中不需要的文件:如Application和ApplicationTests等 2.打包 不能使用springboot项目自带的打包插件进行打包: 3.打包 4 ...
- 在前后端分离的SpringBoot项目中集成Shiro权限框架
参考[1].在前后端分离的SpringBoot项目中集成Shiro权限框架 参考[2]. Springboot + Vue + shiro 实现前后端分离.权限控制 以及跨域的问题也有涉及
随机推荐
- Spring 源码(9)Spring Bean的创建过程的前期准备
回顾总结 到目前为止,Spring源码中AbstractApplicationContext#refresh方法的已经解读到第11个方法finishBeanFactoryInitialization, ...
- TCP 协议有哪些缺陷?
作者:小林coding 图解计算机基础网站:https://xiaolincoding.com 大家好,我是小林. 忽然思考一个问题,TCP 通过序列号.确认应答.超时重传.流量控制.拥塞控制等方式实 ...
- 基于DEM的坡度坡向分析
坡度坡向分析方法 坡度(slope)是地面特定区域高度变化比率的量度.坡度的表示方法有百分比法.度数法.密位法和分数法四种,其中以百分比法和度数法较为常用.本文计算的为坡度百分比数据.如当角度为45度 ...
- 1903021121-刘明伟-java十一周作业-java面向对象编程
项目 内容 课程班级博客链接 19级信计班(本) 作业要求链接 第十一周作业 博客名称 1903021121-刘明伟-java十一周作业-java面向对象 要求 每道题要有题目,代码(使用插入代码,不 ...
- mapstruct 的 mapstruct-processor 自动生成的 Impl 文件中未设置属性值(时好时坏)
配置依赖和注解处理器 ... <properties> <org.mapstruct.version>1.4.2.Final</org.mapstruct.version ...
- 566. Reshape the Matrix - LeetCode
Question 566. Reshape the Matrix Solution 题目大意:给一个二维数组,将这个二维数组转换为r行c列 思路:构造一个r行c列的二维数组,遍历给出二给数组nums, ...
- 项目中导入本地jar包问题
1. 问题 一个Maven项目,需要依赖一个本地jar包,以如下方式引用: <dependency> <groupId>xxx.sdk</groupId> < ...
- 133_Power BI 报表服务器2020年1月版本更新亮点
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一个很长的春节假期后,居家办公. 升级了Power BI 报表服务器(2020年1月版本). 具体的升级内容见官网博客: ...
- Endeavour OS 安装流程中的一些小问题的对应的解决方案
安装窗口显示"系统未连接到互联网",但实际上已经连接了 Endeavour OS 检测系统是否连接上互联网的方式就是 ping 一个目标站点,这个站点默认写入在 /etc/cala ...
- Hive参数与性能企业级调优
Hive作为大数据平台举足轻重的框架,以其稳定性和简单易用性也成为当前构建企业级数据仓库时使用最多的框架之一. 但是如果我们只局限于会使用Hive,而不考虑性能问题,就难搭建出一个完美的数仓,所以Hi ...