Springboot 整合 swagger

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40254498/article/details/83622098

swagger

主要是为后端服务的接口文档,懒人必备,swagger就是一款让你更好的书写API文档的框架。
其他的框架有阿里爸爸推出 Rap ,感兴趣的可以自己了解一下。
本文主要基于springboot,要先了解下springboot;

开始

Maven

本项目基于maven
springboot pom 中添加

  <!-- swagger --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.5.0</version></dependency><!-- swagger-ui --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.5.0</version></dependency><dependency><groupId>io.github.swagger2markup</groupId><artifactId>swagger2markup-spring-restdocs-ext</artifactId><version>2.5.0</version><scope>test</scope></dependency>

启动

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author Dwxqnswxl*/
@EnableAutoConfiguration
@SpringBootApplication(scanBasePackages = "com.example")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

配置

import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;/*** Description** @Author : huangjinxing* @Email : hmm7023@gmail.com* @Date : 2018/10/24 11:10* @Version :*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket swaggerSpringMvcPlugin() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();}@Beanpublic ApiInfo apiInfo() {return new ApiInfoBuilder().title("接口列表 v1.1.0").description("接口测试").termsOfServiceUrl("http://localhost:8080/").contact(new Contact("HUANGJINXING","www.dwxqnswxl.cn","hmm7023@gmail.com")).version("1.1.0").build();}}

Controller

package com.example.controller;import com.example.bean.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;import java.util.HashMap;
import java.util.Map;/*** Description** @Author : huangjinxing* @Email : hmm7023@gmail.com* @Date : 2018/10/24 11:12* @Version :*/
@Api()
@RestController
@RequestMapping("/demoController")
public class DemoController {private static final Logger log = LoggerFactory.getLogger(DemoController.class);public static final String RET_CODE = "retCode";public static final String RET_MSG = "retMsgo";@ApiOperation(value = "新增用户", notes = "新增注册")@PostMapping(value = "/createUser", consumes = MediaType.APPLICATION_JSON_VALUE)public DeferredResult createUser(@RequestBody User user) {log.info("createUser:::" , user.toString());DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "新增成功.");deferredResult.setResult(map);return deferredResult;}@ApiOperation(value = "修改用户", notes = "修改用户")@PostMapping(value = "/updateUser", consumes = MediaType.APPLICATION_JSON_VALUE)public DeferredResult updateUser(@RequestBody User user) {log.info("updateUser:::" , user.toString());DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "修改成功.");deferredResult.setResult(map);return deferredResult;}@ApiOperation(value = "删除用户", notes = "删除用户")@ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户标识", required = true, paramType = "query", dataType = "String")})@DeleteMapping(value = "/deleteUser")public DeferredResult deleteUser(@RequestParam("userId") String userId) {log.info("deleteUser:::" , userId);DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "删除成功.");deferredResult.setResult(map);return deferredResult;}@ApiOperation(value = "查询用户", notes = "查询用户")@ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户标识", required = true, paramType = "query", dataType = "String")})@GetMapping(value = "/queryUser")public DeferredResult queryUser(@RequestParam("userId") String userId) {log.info("queryUser:::" , userId);DeferredResult deferredResult = new DeferredResult();Map map = new HashMap();map.put(RET_CODE, HttpStatus.OK.value());map.put(RET_MSG, "查询成功.");map.put("username", "张三.");map.put("password", "123456");deferredResult.setResult(map);return deferredResult;}
}

User类

package com.example.bean;/*** Description** @Author : huangjinxing* @Email : hmm7023@gmail.com* @Date : 2018/10/24 11:16* @Version :*/
public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

启动

登陆 http://localhost:8080/swagger-ui.html#/
就可以看到有UI的 接口 
swagger的功能不止如此。

效果

index
接口描述
接口测试返回

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

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

相关文章

Project为项目设置预算

假设项目预算10万元&#xff0c;如果项目完成后&#xff0c;花费没有超过10万元&#xff0c;则成本管理是成功的&#xff0c;如果花费了11万&#xff0c;则超过了预算。 预算是10万&#xff0c;一般目标成本设得比预算成本低&#xff0c;比如9.5万。在项目实施过程中&#xff…

activiti7流程设计器_变频空调器通信电路

通信电路由室内机和室外机主板两个部分单元电路组成&#xff0c;并且在实际维修中该电路的故障率比较高&#xff0c;因此单设--节进行详细说明。第三章变频空调器单元电路对比和通信电路第二节通信电路通信电路由室内机和室外机主板两个部分单元电路组成&#xff0c;并且在实际…

PyCharm 中为 Python 项目添加.gitignore文件

文章目录 1.安装.ignore插件 2.在项目中添加.ignore文件 1.安装.ignore插件 在pycharm编译器中&#xff0c;依次点击File->Setting 在跳出Setting的页面中&#xff0c;执行如下操作&#xff1a; 点击左侧的Plugins&#xff0c; 在搜索框中输入.ignore 点击右侧的install 点…

mysql的分页查询

为什么80%的码农都做不了架构师&#xff1f;>>> order by case when 的用法&#xff08;实现特殊情况的排序&#xff0c;如leader1的排最前面&#xff09;&#xff1a; select * from m_worker_project order by CASE WHEN leader 1 THEN 100 ELSE 1000 END 项目中…

.describe() python_python的apply应用:一般性的“拆分-应用-合并”,附加详细讲解

跟aggregate一样&#xff0c;transform也是一个有着严格条件的特殊函数&#xff1a;传入的函数只能产生两种结果&#xff0c;要么产生一个可以传播的标量值(如np.mean)&#xff0c;要么产生一个相同大小的结果数组。最一般化的GroupBy方法是apply&#xff0c;apply会将待处理的…

DNS服务(4)Slave DNS及高级特性

为了简化运维人员的负担&#xff0c;使用Master/Slave DNS架构的情况比较好&#xff0c;现在我们来简单叙述一下Master/Slaver DNS的特点主DNS服务器&#xff1a;维护所负责解析的域内解析库服务器&#xff1b;解析库由管理员维护&#xff1b;从DNS服务器:从主DNS服务器或其它的…

think python下载 中文版开源!这或许是最经典的编程教材

《Think Python》是很多Python初学者的不二入门教材&#xff0c;受到广泛好评。该书原作者是美国Olin工程学院的教授Allen B. Downey&#xff0c;目前该书的原版和中文版本都已免费开源。 中文版本译者是一名自学Python的编程爱好者。选择翻译《Think Python》&#xff0c;一是…

datatable的数据进行组内排序_排序算法学习分享(四)希尔排序

排序&#xff0c;也称为排序算法&#xff0c;可以说是我们学习算法的过程中遇到的第一个门槛&#xff0c;也是实际应用中使用得较为频繁的算法&#xff0c;我将自己对所学的排序算法进行一个归纳总结与分享&#xff0c;如有错误&#xff0c;欢迎指正&#xff01;排序算法学习分…

jupyter notebook 安装代码提示功能

效果 安装成功后&#xff0c;输入部分代码&#xff0c;按 tab 键&#xff0c;会提示代码 安装步骤 1.安装nbextensions 从国内的pip镜像下载快 pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com jupyter_contrib_nbextensions jupyter contr…

python需要配置环境变量吗_python为什么会环境变量设置不成功

学习python编程&#xff0c;首先要配置好环境变量。本文主要讲解python的环境变量配置&#xff0c;在不同版本下如何安装 Windows 打开Python官方下载网站 https://www.python.org/downloads/release/python-370/ x86:表示是32位电脑 x86-64:表示是64位电脑 目前Python版本分为…

一维数组、二维数组、三维数组、四维数组、多维数组的理解

以图书馆来举例 一维数组是一条线 二维数组是一页纸 三维数组是一本书 四维数组是书架 五维数组是图书室2201&#xff08;好几个书架&#xff09; 六维数组是图书馆某一层&#xff0c;2楼/3楼&#xff0c;好几个图书室 七维数组是整个图书馆 第N维数组是宇宙..................…

在资源使用状况视图中查看资源的负荷情况

只有工时类资源才会出现过度分配&#xff0c;因为工时类资源通常指组织内部的人力资源或者机械设备等&#xff0c;这些资源通常都有数量上的瓶颈&#xff0c;也只有工时类资源才会在【资源工作表】中设置它的最大单位和资源可用性&#xff0c;这就限制了它在不同时间段内的可用…

python常用单词自由且开放_python常用英语单词词汇 unit7

1. Darcula IntelliJ IDEA自带的黑色主题名称&#xff0c;Android Studio是基于IntelliJ IDEA的。 2. Appearance /prns/ n. 外观&#xff1b; 3. Custom /kstm/ n. 习惯&#xff1b; 4. UI abbr. 用户界面&#xff08;user interface&#xff09; 5.Terminate /tmnet/ 终止、结…

2018.10.29-2018.11.4

简述osi七层模型和TCP/IP五层模型应用层OSI 参考模型中最靠近用户的一层&#xff0c;是为计算用户提供应用接口&#xff0c;也为用户直接提供网络服务。常见的应用层网络服务协议有&#xff1a;HTTP,HTTPS,FTP,POP3,SMTP等表示层表示提供各种用于应用层数据编码和转换功能&…

CSV文件转Excel后数字自动转换成科学计数法的解决方法

CSV文件用Excel打开后&#xff0c;长度超过11位的数字自动转换成科学计数法显示&#xff0c;末尾数字变成“0000”&#xff0c;如何解决这一问题&#xff1f; 以“老劳模系统数据.CSV”为例&#xff0c;身份证码是科学计数法了 第一步&#xff1a;新建excel&#xff0c;用 off…

python 小说 云_python小说网站

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; python爬虫之小说网站--下载小说(正则表达式)思路:1. 找到要下载的小说首页,打开网页源代码进行分析(例:htt…

6.6(java学习笔记)文件分割(IO综合例子)

基本思路&#xff1a; 文件分割&#xff1a;将一个文件分割成若干个独立的文件。 设置分割后小文件文件的字节数&#xff0c;然后读取被分割文件&#xff0c; 将对应的字节数写入分割后的小文件中。 使用seek定位下一次读取位置。 文件合并&#xff1a;将分割后的若干的文件合并…

小米MIUI关闭内容中心通知

被MIUI的内容中心打扰了许久&#xff0c;终于找到彻底关闭它的方式。 这个内容中心&#xff0c;在应用列表里找不到卸载&#xff0c;在通知管理里也找不到&#xff0c;小米把它藏得深。 关闭内容中心通知 第一步&#xff0c;先进入内容中心&#xff0c;然后切换到后台&#…

Java虚拟机-第二篇-GC算法与内存分配策略

2019独角兽企业重金招聘Python工程师标准>>> GC引入 在Java的运行时数据区中&#xff0c;程序计数器、虚拟机栈、本地方法栈三个区域都是线程私有的&#xff0c;随线程而生&#xff0c;随线程而灭&#xff0c;在方法结束或线程结束时&#xff0c;内存自然就跟着回收…

Caffe学习记录(十一) ICNet分割网络学习

ICNet 是一个既考虑性能&#xff0c;又考虑准确率的分割网络&#xff0c;包含了语义分割和边缘精确分割&#xff0c;因为偶然看到就简单的了解一下&#xff0c;记录下来 论文是: ICNet for Real_time Semantic Segmentation on High Resolution Images&#xff0c;整篇文章都在…