欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-18 09:10:34
前言 swagger,中文“拽”的意思。它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅, 而且还提供了在线文档的测试。另外swagger很容易...

前言

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 添加依赖

<dependency>
   <groupid>io.springfox</groupid>
   <artifactid>springfox-swagger2</artifactid>
   <version>2.7.0</version>
</dependency>
<dependency>
   <groupid>io.springfox</groupid>
   <artifactid>springfox-swagger-ui</artifactid>
   <version>2.7.0</version>
</dependency>

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://www.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<long, book> books = collections.synchronizedmap(new hashmap<long, book>());

 @apioperation(value="获取图书列表", notes="获取图书列表")
 @requestmapping(value={""}, method= requestmethod.get)
 public list<book> getbook() {
  list<book> 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<long, user> users = collections.synchronizedmap(new hashmap<long, user>());

  @apioperation(value="获取用户列表", notes="")
  @requestmapping(value={""}, method= requestmethod.get)
  public list<user> getuserlist() {
    list<user> r = new arraylist<user>(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界面查看

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

四、项目代码地址

https://github.com/lancetobigdata/springbootlearning/tree/develop/springboot-swagger

总结

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