Spring Boot整合Swagger2的完整步骤详解

网友投稿 442 2023-01-26


Spring Boot整合Swagger2的完整步骤详解

前言

swagger,中文“拽”的意思。它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,

而且还提供了在线文档的测试。另外swagger很容易构建restful风格的api。

一、Swagger概述

Swagger是一组围绕OpenAPI规范构建的开源工具,可帮助设计、构建、记录和使用REST API。

简单说下,它的出现就是为了方便进行测试后台的restful形式的接口,实现动态的更新,当我们在后台的接口

修改了后,swagger可以实现自动的更新,而不需要认为的维护这个接口进行测试。

二、Swagger常用注解

swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。

@Api:修饰整个类,描述Controller的作用

@ApiOperation:描述一个类的一个方法,或者说一个接口

@ApiParam:单个参数描述

@ApiModel:用对象来接收参数

@ApiProperty:用对象接收参数时,描述对象的一个字段

@ApiResponse:HTTP响应其中1个描述

@ApiResponses:HTTP响应整体描述

@ApiIgnore:使用该注解忽略这个API

@ApiError :发生错误返回的信息

@ApiParamImplicitL:一个请求参数

@ApiParamsImplicit 多个请求参数

三、SpringBoot整合Swagger

3.1 添加依赖

io.springfox

springfox-swagger2

2.7.0

io.springfox

springfox-swagger-ui

2.7.0

3.2 添加SwaggerConfiguration

通过@Configuration注解,表明它是一个配置类,@EnableSwagger2开启swagger2。

apiINfo()配置一些基本的信息。apis()指定扫描的包会生成文档。

再通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会

展现在文档页面中)。select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来

展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容

(除了被@ApiIgnore指定的请求)。

package com.lance.learn.springbootswagger.configuration;

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.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;

/**

* @author lance(ZYH)

* @function Swagger启动配置类

* @date 2018-07-09 21:24

*/

@Configuration

@EnableSwagger2

public class SwaggerConfiguration {

/**

* swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等

* @return

*/

@Bean

public Docket createRestfulApi(){

return new Docket(DocumentationType.SWAGGER_2)

.pathMapping("/")

.select()

.apis(RequestHandlerSelectors.basePackage("com.lance.learn.springbootswagger.controller")) //暴露接口地址的包路径

.paths(PathSelectors.any())

.build();

}

/**

* 构建 api文档的详细信息函数,注意这里的注解引用的是哪个

* @return

*/

private ApiInfo apiInfo(){

return new ApiInfoBuilder()

//页面标题

.title("Spring Boot 测试使用 Swagger2 构建RESTful API")

//创建人

.contact(new Contact("LanveToBigData", "http://cnblogs.com/zhangyinhua/", "917484312@qq.com"))

//版本号

.version("1.0")

//描述

.description("API 描述")

.build();

}

}

3.3 Controller文档内容

描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。

如下所示,我们通过@ApiOperation注解来给API增加说明、通过@ApiImplicitParams、@ApiImplicitParam

注解来给参数增加说明。

1)实例一

package com.lance.learn.springbootswagger.controller;

import com.lance.learn.springbootswagger.bean.Book;

import io.swagger.annotations.ApiImplicitParam;

import io.swagger.annotations.ApiImplicitParams;

import io.swagger.annotations.ApiOperation;

import org.springframework.web.bind.annotation.*;

import springfox.documentation.annotations.ApiIgnore;

import java.util.*;

/**

* @author lance(ZYH)

* @function

* @date 2018-07-09 21:39

*/

@RestController

@RequestMapping(value = "/bookcurd")

public class BookController {

Map books = Collections.synchronizedMap(new HashMap());

@ApiOperation(value="获取图书列表", notes="获取图书列表")

@RequestMapping(value={""}, method= RequestMethod.GET)

public List getBook() {

List book = new ArrayList<>(books.values());

return book;

}

@ApiOperation(value="创建图书", notes="创建图书")

@ApiImplicitParam(name = "book", value = "图书详细实体", required = true, dataType = "Book")

@RequestMapping(value="", method=RequestMethod.POST)

public String postBook(@RequestBody Book book) {

books.put(book.getId(), book);

return "success";

}

@ApiOperation(value="获图书细信息", notes="根据url的id来获取详细信息")

@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path")

@RequestMapping(value="/{id}", method=RequestMethod.GET)

public Book getBook(@PathVariable Long id) {

return books.get(id);

}

@ApiOperation(value="更新信息", notes="根据url的id来指定更新图书信息")

@ApiImplicitParams({

@ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path"),

@ApiImplicitParam(name = "book", value = "图书实体book", required = true, dataType = "Book")

})

@RequestMapping(value="/{id}", method= RequestMethod.PUT)

public String putUser(@PathVariable Long id, @RequestBody Book book) {

Book book1 = books.get(id);

book1.setName(book.getName());

book1.setPrice(book.getPrice());

books.put(id, book1);

return "success";

}

@ApiOperation(value="删除图书", notes="根据url的id来指定删除图书")

@ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path")

@RequestMapping(value="/{id}", method=RequestMethod.DELETE)

public String deleteUser(@PathVariable Long id) {

books.remove(id);

return "success";

}

@ApiIgnore//使用该注解忽略这个API

@RequestMapping(value = "/hi", method = RequestMethod.GET)

public String jsonTest() {

return " hi you!";

}

}

2)实例二

package com.lance.learn.springbootswagger.controller;

import com.lance.learn.springbootswagger.bean.User;

import io.swagger.annotations.ApiImplicitParam;

import io.swagger.annotations.ApiImplicitParams;

import io.swagger.annotations.ApiOperation;

import org.springframework.web.bind.annotation.*;

import java.util.*;

/**

* @author lance(ZYH)

* @function

* @date 2018-07-09 22:00

*/

@RestController

@RequestMapping(value="/users")

public class UserDetailController {

static Map users = Collections.synchronizedMap(new HashMap());

@ApiOperation(value="获取用户列表", notes="")

@RequestMapping(value={""}, method= RequestMethod.GET)

public List getUserList() {

List r = new ArrayList(users.values());

return r;

}

@ApiOperation(value="创建用户", notes="根据User对象创建用户")

@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")

@RequestMapping(value="", method=RequestMethod.POST)

public String postUser(@RequestBody User user) {

users.put(user.getId(), user);

return "success";

}

@ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")

@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")

@RequestMapping(value="/{id}", method=RequestMethod.GET)

public User getUser(@PathVariable Long id) {

return users.get(id);

}

@ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")

@ApiImplicitParams({

@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"),

@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")

})

@RequestMapping(value="/{id}", method=RequestMethod.PUT)

public String putUser(@PathVariable Long id, @RequestBody User user) {

User u = new User();

users.put(id, u);

return "success";

}

@ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")

@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")

@RequestMapping(value="/{id}", method=RequestMethod.DELETE)

public String deleteUser(@PathVariable Long id) {

users.remove(id);

return "success";

}

}

3.4 web界面查看

四、项目代码地址

https://github.com/LanceToBigData/SpringBootLearning/tree/develop/SpringBoot-Swagger

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:虚拟mac连接共享文件夹(mac连接windows共享文件夹)
下一篇:Java实现求数组最长子序列算法示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~