实体类 接口_spring-boot-route(五)整合Swagger生成接口文档

目前,大多数公司都采用了前后端分离的开发模式,为了解决前后端人员的沟通问题,后端人员在开发接口的时候会选择使用swagger2来生成对应的接口文档,swagger2提供了强大的页面调试功能,这样可以有效解决前后端人员沟通难的问题。下面我们使用SpringBoot结合swagger2生成Restful API文档。一 搭建项目,引入依赖新建一个spring-boot-swaager的项目,引入swaager2的依赖,由于swagger2的ui不是很美观,这里将使用开源的swagger-bootstrap-ui做为ui。引入依赖<!-- swaager2依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swaager2ui -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
项目中配置swagger相关信息@Configuration
@EnableSwagger2
public class configuration {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.javatrip.swagger.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
// 标题
.title("某某项目接口文档")
// 描述
.description("swagger2接口文档使用演示")
// 版本
.version("1.0")
// 许可证
.license("MIT")
// 许可证地址
.licenseUrl("http://www.xx.com")
// 服务端地址
.termsOfServiceUrl("https://www.cnblogs.com/zhixie/")
// 联系信息
.contact(new Contact("java旅途","https://www.cnblogs.com/zhixie/","binzh303@163.com"))
.build();
}
}
访问路径,查看生成效果文章中使用的这个ui,接口文档地址为ip:port/doc.html,生成的文档信息如下:二 编写Restful接口新建实体类@ApiModel("用户实体类")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
@ApiModelProperty("姓名")
private String name;
@ApiModelProperty(value = "年龄")
private int age;
}
新建Restful接口@Api(tags = "用户接口")
@RestController
@RequestMapping("person")
public class PersonController {
@ApiOperation(value = "获取用户列表",notes = "根据name获取用户列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",required = true),
@ApiImplicitParam(name = "age",value = "年龄",dataType = "int",required = true)
})
@GetMapping("/{name}")
public Person getPerson(@PathVariable("name") String name,@RequestParam int age){
return new Person(name,age);
}
@ApiOperation(value = "新增用户",notes = "根据用户实体类新增用户")
@ApiImplicitParam(name = "person",value = "用户实体类",dataType = "Person",required = true)
@PostMapping("add")
public int addPerson(@RequestBody Person person){
if(StringUtils.isEmpty(person)){
return -1;
}
return 1;
}
@ApiOperation(value = "更新用户信息",notes = "根据用户实体更新用户信息")
@ApiImplicitParam(name = "person",value = "用户实体类",dataType = "Person",required = true)
@PutMapping("update")
public int updatePerson(@RequestBody Person person){
if(StringUtils.isEmpty(person)){
return -1;
}
return 1;
}
@ApiOperation(value = "删除用户信息",notes = "根据用户名删除用户信息")
@ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",required = true)
@DeleteMapping("/{name}")
public int deletePerson(@PathVariable(name = "name") String name){
if(StringUtils.isEmpty(name)){
return -1;
}
return 1;
}
}
三 swagger文档简介我就直接用图来表示了,这样看着也更加直观swagger2注解对应到文档上的表现形式如上。swagger2支持在线调试,打开某个具体的接口,根据提示填写对应的参数,点击发送就可返回响应结果。

下面我们使用SpringBoot结合swagger2生成Restful API文档。

一 搭建项目,引入依赖

新建一个spring-boot-swaager的项目,引入swaager2的依赖,由于swagger2的ui不是很美观,这里将使用开源的swagger-bootstrap-ui做为ui。

引入依赖

<!-- swaager2依赖 -->    
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency>
<!-- swaager2ui -->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version>
</dependency>

项目中配置swagger相关信息

@Configuration
@EnableSwagger2
public class configuration {@Beanpublic Docket createRestApi(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.javatrip.swagger.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo(){return new ApiInfoBuilder()// 标题.title("某某项目接口文档")// 描述.description("swagger2接口文档使用演示")// 版本.version("1.0")// 许可证.license("MIT")// 许可证地址.licenseUrl("www.xx.com")// 服务端地址.termsOfServiceUrl("https://www.cnblogs.com/zhixie/")// 联系信息.contact(new Contact("java旅途","https://www.cnblogs.com/zhixie/","binzh303@163.com")).build();}
}

访问路径,查看生成效果

文章中使用的这个ui,接口文档地址为ip:port/doc.html,生成的文档信息如下:

3d20dbf7225e43b804c4a3733560049b.png

二 编写Restful接口

新建实体类

@ApiModel("用户实体类")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {@ApiModelProperty("姓名")private String name;@ApiModelProperty(value = "年龄")private int age;
}

新建Restful接口

@Api(tags = "用户接口")
@RestController
@RequestMapping("person")
public class PersonController {@ApiOperation(value = "获取用户列表",notes = "根据name获取用户列表")@ApiImplicitParams({@ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",required = true),@ApiImplicitParam(name = "age",value = "年龄",dataType = "int",required = true)})@GetMapping("/{name}")public Person getPerson(@PathVariable("name") String name,@RequestParam int age){return new Person(name,age);}@ApiOperation(value = "新增用户",notes = "根据用户实体类新增用户")@ApiImplicitParam(name = "person",value = "用户实体类",dataType = "Person",required = true)@PostMapping("add")public int addPerson(@RequestBody Person person){if(StringUtils.isEmpty(person)){return -1;}return 1;}@ApiOperation(value = "更新用户信息",notes = "根据用户实体更新用户信息")@ApiImplicitParam(name = "person",value = "用户实体类",dataType = "Person",required = true)@PutMapping("update")public int updatePerson(@RequestBody Person person){if(StringUtils.isEmpty(person)){return -1;}return 1;}@ApiOperation(value = "删除用户信息",notes = "根据用户名删除用户信息")@ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",required = true)@DeleteMapping("/{name}")public int deletePerson(@PathVariable(name = "name") String name){if(StringUtils.isEmpty(name)){return -1;}return 1;}
}

三 swagger文档简介

我就直接用图来表示了,这样看着也更加直观

9ae75575e6ce83a60b75d733ff90284a.png

9d8aeac4eb8afe519e1d1fb101b6196c.png

swagger2注解对应到文档上的表现形式如上。swagger2支持在线调试,打开某个具体的接口,根据提示填写对应的参数,点击发送就可返回响应结果。

bba46343359db3e0c8517c06fc324f0f.png

本文示例代码已上传至github,点个star支持一下!

Spring Boot系列教程目录

spring-boot-route(一)Controller接收参数的几种方式

spring-boot-route(二)读取配置文件的几种方式

spring-boot-route(三)实现多文件上传

spring-boot-route(四)全局异常处理

spring-boot-route(五)整合Swagger生成接口文档

spring-boot-route(六)整合JApiDocs生成接口文档

spring-boot-route(七)整合jdbcTemplate操作数据库

spring-boot-route(八)整合mybatis操作数据库

spring-boot-route(九)整合JPA操作数据库

spring-boot-route(十)多数据源切换

spring-boot-route(十一)数据库配置信息加密

spring-boot-route(十二)整合redis做为缓存

spring-boot-route(十三)整合RabbitMQ

spring-boot-route(十四)整合Kafka

spring-boot-route(十五)整合RocketMQ

spring-boot-route(十六)使用logback生产日志文件

spring-boot-route(十七)使用aop记录操作日志

spring-boot-route(十八)spring-boot-adtuator监控应用

spring-boot-route(十九)spring-boot-admin监控服务

spring-boot-route(二十)Spring Task实现简单定时任务

spring-boot-route(二十一)quartz实现动态定时任务

spring-boot-route(二十二)实现邮件发送功能

spring-boot-route(二十三)开发微信公众号

这个系列的文章都是工作中频繁用到的知识,学完这个系列,应付日常开发绰绰有余。如果还想了解其他内容,请在github上提交issue,我会进一步完善这个系列的文章!

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

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

相关文章

【qduoj - 312】寻找唯一的萌妹(卡时)

题干&#xff1a; 寻找唯一的萌妹 Description 又到了一年一度ACMer暑期留校集训的日子了&#xff0c;目前一共有2n1个小萌新报名参加暑期集训&#xff0c;其中2n个是帅哥&#xff0c;只有1个萌妹子&#xff0c;这是多么的悲催&#xff01;由于暑期训练强度大&#xff0c;坚持…

python 遍历字典嵌套_Python 字典嵌套循环遍历

这是从接口获取到的json数据{* "code":"10000",* "charge":false,* "remain":0,* "msg":"查询成功",* "result":{* "status":0,* "msg":"ok",* "result":{* &…

ACMer的AC福音!手动扩栈外挂!(防止栈溢出)

还在因为 怕 g 提交时间很慢&#xff0c;但是用C 交又怕栈溢出&#xff1f;&#xff1f;&#xff1f; 我们都知道&#xff0c;如果代码里有 递归函数 频繁调用&#xff0c; 用 C 提交代码&#xff0c; 很可能就会 出现 Runtime Error (ACCESS_VIOLATION) 但是用G…

【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)

题干&#xff1a; Happy 2004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1863 Accepted Submission(s): 1361 Problem Description Consider a positive integer X,and let S be the sum of all pos…

bootstrap-table 新增可编辑行_现代Web开发堆栈工具DevExtreme 新增Gantt组件,助力项目管理...

点击“了解更多”获取DevExpress DevExtreme v19.2正式版下载DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈(包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等)构建交互式的Web应…

关抢占 自旋锁_互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

前言生活中用到的锁&#xff0c;用途都比较简单粗暴&#xff0c;上锁基本是为了防止外人进来、电动车被偷等等。但生活中也不是没有 BUG 的&#xff0c;比如加锁的电动车在「广西 - 窃格瓦拉」面前&#xff0c;锁就是形同虚设&#xff0c;只要他愿意&#xff0c;他就可以轻轻松…

【HDU - 1852】 Beijing 2008()

题干&#xff1a; Beijing 2008 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others) Total Submission(s): 917 Accepted Submission(s): 394 Problem Description As we all know, the next Olympic Games will be held in Beiji…

dvwa详解_DVWA(六):XSSReflected 反射型XSS全等级详解

XSS 概念&#xff1a;由于web应用程序对用户的输入过滤不严&#xff0c;通过html注入篡改网页&#xff0c;插入恶意脚本&#xff0c;从而在用户浏览网页时&#xff0c;控制用户浏览器的一种攻击。XSS类型&#xff1a;Reflected(反射型)&#xff1a;只是简单的把用户输入的数据反…

直线的端点画垂线的lisp_【以课说法】线段、射线、直线

课例概况课例点晴你的课堂是碎片化的知识教学&#xff0c;还是结构化的问题探究&#xff1f;如何把碎片化的知识教学变成结构化的问题探究&#xff1f;实施路径就是问题串&#xff0c;用问题串统整知识点&#xff1b;围绕问题串&#xff0c;从问题引发、问题探究&#xff0c;直…

*【CF#633B】 A Trivial Problem(二分或枚举)

题干&#xff1a; Mr. Santa asks all the great programmers of the world to solve a trivial problem. He gives them an integer m and asks for the number of positive integers n, such that the factorial of n ends with exactly m zeroes. Are you among those grea…

wordpress拒绝访问_Nginx + Wordpress页面或帖子URL返回拒绝访问

谢谢你的答案 r3wt。但是&#xff0c;我猜上面的配置文件是不合适的我不想保持原样(但是对于我来说开发似乎没问题&#xff0c;因为部署我宁愿为每个站点使用单独的配置文件)。所以&#xff0c;别名部分和我的问题应该正确定义try_files因为我想要捕获链接以localhost / szpetr…

【HDU - 2104】hide handkerchief (素数)

题干&#xff1a; The Children’s Day has passed for some days .Has you remembered something happened at your childhood? I remembered I often played a game called hide handkerchief with my friends. Now I introduce the game to you. Suppose there are N peo…

python高级编程装饰器_Python装饰器

def my_decorator(function):def _my_decorator(*args, **kw):#在调用实际函数之前做些填充工作res function(*args, **kw)#做完某些填充工作之后return res#返回子函数return _my_decorator当装饰器需要参数时&#xff0c;必须使用第二级封装。def my_decorator(arg1, arg2):…

【HihoCoder - 1269】 优化延迟 (优先队列+二分优化)

题干&#xff1a; 小Ho编写了一个处理数据包的程序。程序的输入是一个包含N个数据包的序列。每个数据包根据其重要程度不同&#xff0c;具有不同的"延迟惩罚值"。序列中的第i个数据包的"延迟惩罚值"是Pi。如果N个数据包按照<Pi1, Pi2, ... PiN>的顺…

带有风的诗词_带有风的诗句

带有风的诗句1、古道西风瘦马&#xff0c;夕阳西下&#xff0c;断肠人在天涯。——马致远《天净沙秋思》2、欲乘风归去&#xff0c;又恐琼楼玉宇。——苏轼《水调歌头明月几时有》3、道通天地有形外&#xff0c;思入风云变态中。——程颢《秋日》4、津亭杨柳碧毵毵&#xff0c;…

【ZOJ - 3210】A Stack or A Queue? (模拟)

题干&#xff1a; Do you know stack and queue? Theyre both important data structures. A stack is a "first in last out" (FILO) data structure and a queue is a "first in first out" (FIFO) one. Here comes the problem: given the order of …

ehchache验证缓存过期的api_Ehcache缓存配置

Cache的配置很灵活&#xff0c;官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。你可以将Cache的配置从代码中剥离出来&#xff0c;也可以在使用运行时配置&#xff0c;所谓的运行时配置无非也就是在代码中…

*【POJ - 3061】 Subsequence (尺取或二分)

题干&#xff1a; A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to find the minimal length of the subsequence of consecutive eleme…

alert 回调_JavaScript中到底什么时候回调函数Callback

什么是回调函数Callback简单的理解&#xff1a;回调函数是在另一个函数执行完毕后执行的函数 - 因此名称为call back。复杂的理解&#xff1a;在JavaScript中&#xff0c;函数是对象。因此&#xff0c;函数可以将函数作为参数&#xff0c;并且可以由其他函数返回。执行此操作的…

【CF#148B】Escape(模拟)

题干&#xff1a; The princess is going to escape the dragons cave, and she needs to plan it carefully. The princess runs at vp miles per hour, and the dragon flies at vd miles per hour. The dragon will discover the escape after t hours and will chase the…