SpringBoot集成Swagger构建api文档的操作

最近在做项目的时候,一直用一个叫做API的东西,controller注解我会写,这个东西我也会用,但是我确实不知道这个东西是个什么,有点神奇。关键还坑了我一次,他的注解会影响到代码的运行,不光是起到注解的作用。所以我就研究了一下。

Swagger是什么:THE WORLD'S MOST POPULAR API TOOLING

根据官网的介绍:

Swagger Inspector:测试API和生成OpenAPI的开发工具。Swagger Inspector的建立是为了解决开发者的三个主要目标。

1、执行简单的API测试

2、生成OpenAPI文档

3、探索新的API功能

我的理解Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。简单来说,Swagger是一个功能强大的接口管理工具,并且提供了多种编程语言的前后端分离解决方案。根据我的使用,当然我只是最简单的使用,我感觉Swagger有以下几个优点:

1、Swagger可以整合到代码中,在开发时通过注解,编写注释,自动生成API文档。

2、将前端后台分开,不会有过分的依赖。

3、界面清晰,无论是editor的实时展示还是ui的展示都十分人性化,如果自己仅仅用markdown来编写,又要纠结该如何展现,十分痛苦。

下面的两点我还没有进行实践:

1、支持Json和yaml来编写API文档,并且支持导出为json、yaml、markdown等格式

2、如果编写好了API了,可以自动生成相应的SDK,没错,可能你的API接口代码还没有开始写,它就能帮你制作相应的SDK了,而且支持几乎所有主流编程语言的SDK。

SpringBoot,Maven构建SwaggerAPI文档

第一步:创建SpringBoot Web项目

在这里就不过多进行介绍,只是说一下可能出现的问题:创建好项目之后目录结构不对,只有src/main/resources文件夹。下图所示

这时候只需要将JDK版本升级到你安装的版本就可以,其他文件夹就可以显现出来:

第二步:创建类以及配置pom.xml

1:配置pom.xml,添加依赖包:

第一个是API获取的包,第二是官方给出的一个ui界面。三和四是spring boot 需要的jar包。

  <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
  </dependency>

  <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>

2:配置Swagger,创建SwaggerConfig.java类

@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
    return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
      .select()
      .apis(RequestHandlerSelectors.basePackage("com"))
      .paths(PathSelectors.any()).build();
}

private ApiInfo apiInfo() {
  return new ApiInfoBuilder()
    .title("Spring Boot中使用Swagger2构建RESTful APIs")
    .description("myapp")
    .termsOfServiceUrl("http://blog.csdn.net/java_yes")
    .version("1.0").build();
  }
}

这里有个特别需要注意的地方:

RequestHandlerSelectors.basePackage(“com.swagger”),这是扫描注解的配置,即你的API接口位置。文章最后我会做总结。

3:创建SpringBoot启动类

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

4:创建controller

在这里我创建两个controller,为了解释@RequestMapping();这两个Controller没有任何实际意义,可以随意创建,我只是为了测试SwaggerAPI

GreetingController

@RestController
@RequestMapping(value = "/test")
public class GreetingController {
  private static final String template = "Hello, %s!";
  private final AtomicLong counter = new AtomicLong();

  @RequestMapping(value = "/swagger")
  //@RequestMapping("/swagger")
  //@RequestMapping(value = "/swagger",method = RequestMethod.POST)
  public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
  }
}

BookController

@RestController
@Api(tags = "BookController", description = "BookController | 通过书来测试swagger")
@RequestMapping(value = "/books")
public class BookController {

  Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, 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);
  }
}

5:创建SpringBoot 启动类:

@SpringBootApplication
@ComponentScan(basePackages={"com"})
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

第三步:启动Swagger

OK,到此为止,整个Swagger我们已经配置完毕。此时访问http://localhost:8080/swagger-ui.html#/greeting-controller。就可以看到Swagger-UI了。如下图所示

同样,根据@RequestMapping()的路径我们可以进行访问,再API中进行测试一样。这里我就进行演示。

坑!!!!我在配置过程中出现的错误;

我先发一下我的文件结构:

1:什么都配置了,但是API什么都不显示。如图所示:

这个就是我上面说到的问题:RequestHandlerSelectors.basePackage(“com.swagger”)

这个地方配置的是你swagger要加载的接口所在的包名。会去扫秒这个包下的所有Controller。大家看我的文件结构。

如果你配置的是RequestHandlerSelectors.basePackage(“com”),那么就会扫描所有com包下的Controller,包括com.swagger;以及com.controller。效果就是这样:

如果你只是单独配置RequestHandlerSelectors.basePackage(“com.swagger”),或者RequestHandlerSelectors.basePackage(“com.swagger”)。那么就会显示一个。

2:我配置的是RequestHandlerSelectors.basePackage(“com”),但API还是只显示一个,而且不显示Controller直接访问地址也报错,如图所示:

这个时候可能是SpringBoot的问题了。他并没有加载到你的另一个controller。

SpringBoot启动类和Controller类需要在同一包下,controller要在父类包下。

这个时候有两种解决方案:

1、将未加载的Conrtoller类移动到SpringBoot启动类所在包。或者将其包名改为启动类的子包。

2、如上述代码,在启动类上加注释:@ComponentScan(basePackages={“com”})。该注释会扫描所有com包下的controller并加载。

为什么我GreetingController没有写rest方法。但是API中显示了所有呢?

这个要用@RequestMapping();进行解释了。

1、@RequestMapping(value = “/swagger”)或者@RequestMapping(“/swagger”)这么写的时候,就会加载所有method。

2、@RequestMapping(value = “/swagger”,method = RequestMethod.POST),当你自己设置mathod的时候,就会只创建你设置的method。

以上这篇SpringBoot集成Swagger构建api文档的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot 快速搭建微服务框架详细教程

    前言: SpringBoot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题---习惯大于约定. Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录. Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XM

  • SpringBoot整合Swagger3生成接口文档过程解析

    前后端分离的项目,接口文档的存在十分重要.与手动编写接口文档不同,swagger是一个自动生成接口文档的工具,在需求不断变更的环境下,手动编写文档的效率实在太低.与新版的swagger3相比swagger2配置更少,使用更加方便. 一.pom文件中引入Swagger3依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId

  • Springboot引入拦截器并放行swagger代码实例

    这篇文章主要介绍了Springboot引入拦截器并放行swagger代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Springboot引入拦截器 自定义的拦截器类 Interceptor package cn.zytao.taosir.auth.config; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import j

  • spring boot项目快速构建的全步骤

    1. 问题描述 springboot的面世,成为Java开发者的一大福音,大大提升了开发的效率,其实springboot只是在maven的基础上,对已有的maven gav进行了封装而已,今天用最简单的代码快速入门springboot. 2. 解决方案 强烈推荐大家使用Idea的付费版(破解感谢下蓝宇),Idea对maven.git等插件支持的更加好. 使用idea自带的spring Initializr(实际调用的是springboot的官网上的initializr),快速新建springbo

  • SpringBoot集成Swagger构建api文档的操作

    最近在做项目的时候,一直用一个叫做API的东西,controller注解我会写,这个东西我也会用,但是我确实不知道这个东西是个什么,有点神奇.关键还坑了我一次,他的注解会影响到代码的运行,不光是起到注解的作用.所以我就研究了一下. Swagger是什么:THE WORLD'S MOST POPULAR API TOOLING 根据官网的介绍: Swagger Inspector:测试API和生成OpenAPI的开发工具.Swagger Inspector的建立是为了解决开发者的三个主要目标. 1

  • Spring Boot 集成 Swagger2构建 API文档

    目录 一.Swagger是什么 1.SwaggerEditor 2.SwaggerUI 3.SwaggerCodegen 4.SwaggerUI 二.SpringBoot集成Swagger 1.创建SpringBoot项目 2.引入依赖 3.构建Swagger配置类 4.编写接口 5.查看并测试接口 前言: 不管你是从事前端还是后端开发,相信都难免被接口文档折磨过.如果你是一个前端开发者,可能你会经常发现后端给的接口文档跟实际代码有所出入.而假设你是一个后端开发者,你可能又会觉得自己开发后端接口

  • SpringBoot基于Swagger2构建API文档过程解析

    一.添加依赖 <!--SpringBoot使用Swagger2构建API文档的依赖--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <group

  • SpringBoot如何自动生成API文档详解

    前言 在做项目的时候,如果项目是前后分离的,后端一定要和前端或者是移动端对接接口,那么问题来了,接口是不是要自己写给他们看,一般的会采用Excel或者Word来写,高级一点的就采用API管理平台手工录入,一个项目有上千上万个接口,天啊,这是多么大的工作量,在接口维护的时候更加痛苦,为了解决这样的事我们可以借助 japi这个项目来完成RESTFul文档的自动生成,完全基于注释生成,更多详细配置可查看https://github.com/dounine/japi. 使用说明 克隆项目下来 git c

  • SpringBoot集成Swagger2生成接口文档的方法示例

    我们提供Restful接口的时候,API文档是尤为的重要,它承载着对接口的定义,描述等.它还是和API消费方沟通的重要工具.在实际情况中由于接口和文档存放的位置不同,我们很难及时的去维护文档.个人在实际的工作中就遇到过很多接口更新了很久,但是文档却还是老版本的情况,其实在这个时候这份文档就已经失去了它存在的意义.而 Swagger 是目前我见过的最好的API文档生成工具,使用起来也很方便,还可以直接调试我们的API.我们今天就来看下 Swagger2 与 SpringBoot 的结合. 准备工作

  • Asp.Net Core使用swagger生成api文档的完整步骤

    前言 .Net Core中有两个集成NSwag的包,分别为Swashbuckle和NSwag.两者的配置大同小异.这里以NSwag为例. 一.前期准备 1.初始化asp.net core 测试项目 新建asp.net core项目,此处略过: 新建apicontroller,并编写测试代码: [Route("api/[controller]")] [ApiController] public class UserApiController : ControllerBase { ///

  • 将JavaDoc注释生成API文档的操作

    目录 将JavaDoc 注释 生成API文档 java自动api文档生成Yapi word文档缺点 swwager文档缺点 将JavaDoc 注释 生成API文档 1. 打开java代码,编写JavaDoc 注释,只有按照java的规范编写注释,才能很好的生成API文档,javadoc注释与普通注释的区别为多一个*(星号).普通代码注释为/*XXX*/,而javadoc的注释为/**XXX*/ 2. javadoc注释要尽量写的详细,这样别人在没有源码的情况下才知道如 何使用您的代码. 3. 点

  • 关于springboot集成swagger及knife4j的增强问题

    参考链接:狂神的Swagger笔记 号称世界上最流行的API框架 Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新 直接运行,在线测试API 支持多种语言 (如:Java,PHP等) 官网:swagger SpringBoot集成Swagger 添加maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2&

  • SpringBoot集成Swagger2构建在线API文档的代码详解

    第一部分:代码集成 pom.xml <!--swagger2配置--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>i

  • 教你利用springboot集成swagger并生成接口文档

    效果图 实现步骤 1.maven中引入jar包,不同版本的swagger可能页面效果不一样. <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId&g

随机推荐