当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Boot整合Swagger2的完整步骤详解

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

2019年07月19日  | 移动技术网IT编程  | 我要评论

前言

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界面查看

四、项目代码地址

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

总结

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网