1.swagger简介

Swagger是一个API接口管理工具,支持在线测试接口数据,根据配置自动生成API文档,结合spring mvc而提供界面化方法文档的一个开源框架。

1.1Swagger主要的项目

Swagger是一组开源项目,主要项目如下:

Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。

Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架进行集成。

Swagger-js: 用于JavaScript的Swagger实现。

Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。

Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。

Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。

Swagger-editor:可让使用者在浏览器里以YAML格式编辑Swagger API规范并实时预览文档。可以生成有效的Swagger JSON描述,并用于所有Swagger工具(代码生成、文档等等)中。

2.Swagger-Bootstrap-UI简介

Swagger-Bootstrap-UI是springfox-swagger的增强UI实现,为Java开发者在使用Swagger的时候,能拥有一份简洁、强大的接口文档体验。

2.1Swagger-Bootstrap-UI核心功能

官方文档:https://doc.xiaominfo.com/guide/#%E7%AE%80%E4%BB%8B

效果:http://swagger-bootstrap-ui.xiaominfo.com/doc.html<?XML:NAMESPACE PREFIX = "[default] http://www.w3.org/2000/svg" NS = "http://www.w3.org/2000/svg" />

示例:https://gitee.com/xiaoym/swagger-bootstrap-ui-demo

该UI增强包主要包括两大核心功能:文档说明在线调试

  • 文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。

  • 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大

3.创建spring Boot项目

本案例是基于spring boot+jpa+mysql+swagger,编译器选择IDEA。

3.1创建maven 项目,引入依赖包:spring boot、swagger和swagger-bootstrap-ui依赖包

spring Boot父包和编码格式设置
<!-- 定义公共资源版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

spring boot常用依赖包

<dependencies>
        <!-- 上边引入 parent,因此 下边无需指定版本 -->
        <!-- 包含 mvc,aop 等jar资源 -->
        <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>

        <!--spring操作数据库jpa  用于将数据存入数据库的类和方法的集-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>

        <!--spring模板引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!--数据库相关-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

其他

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 没有该配置,devtools 不生效 -->
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>
引入swagger和的swagger-bootstrap-ui包

<!-- 引入swagger-ui包  -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>

        <!-- 引入swagger包  -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>

        <!-- 引入swagger-bootstrap-ui包 -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.8.3</version>
        </dependency>

全部:

<!-- 定义公共资源版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- 上边引入 parent,因此 下边无需指定版本 -->
        <!-- 包含 mvc,aop 等jar资源 -->
        <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>

        <!-- 引入swagger-ui包  -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>

        <!-- 引入swagger包  -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>

        <!-- 引入swagger-bootstrap-ui包 -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.8.3</version>
        </dependency>

        <!--spring操作数据库jpa  用于将数据存入数据库的类和方法的集-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>

        <!--spring模板引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!--数据库相关-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 没有该配置,devtools 不生效 -->
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.2编写数据表

3.3利用JPA编写基本的增删改查

在  resources 目录下新建  application.properties 文件,内容如下

#修改tomcat默认端口号
server.port=8090

#配置数据源信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jpastudy
spring.datasource.username=root
spring.datasource.password=1234567
#配置jpa
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent_output=true
##控制台打印sql

entitiy层

/**
 * @Auther: Newbe
 * @Date: 2019/9/24 10:34
 * @Description:
 */
@Entity
public class User {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private  Integer id;
    private  String username;
    private  String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return username;
    }

    public void setUserName(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

service 接口层

package com.newbe.service;

import com.newbe.entity.User;

import java.util.List;
import java.util.Optional;

/**
 * @Auther: Newbe
 * @Date: 2019/9/24 23:48
 * @Description:
 */
public interface UserService {

    //根据id查询用户
    Optional<User> getUserById(Integer id);
    //查询所有用户
    List<User> getUserAll();
    //根据id删除用户
    void del(int id);
    //更新保存
    User save(User user);

}

service impl

package com.newbe.service;

import com.newbe.entity.User;
import com.newbe.repository.UserDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

/**
 * @Auther: Newbe
 * @Date: 2019/9/24 23:53
 * @Description:
 */
@Service
public class UserServiceImpl implements  UserService{

    @Autowired
    private UserDAO userDAO;

    @Override
    public Optional<User> getUserById(Integer id) {
        return userDAO.findById(id);
    }

    @Override
    public List<User> getUserAll() {
        return userDAO.findAll();
    }

    @Override
    public void del(int id) {
         userDAO.deleteById(id);
    }

    @Override
    public User save(User user) {
        userDAO.save(user);
        return user;
    }
}

controller层

package com.newbe.controller;

import com.newbe.entity.User;
import com.newbe.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;

/**
 * @Auther: Newbe
 * @Date: 2019/9/24 23:58
 * @Description:
 */
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/findUserById")
    public Optional<User> getUserById(int id){
        return userService.getUserById(id);
    }

    @RequestMapping("/findAll")
    public List<User> findUserAll(){
        return userService.getUserAll();
    }

    @RequestMapping("/del")
    public void del(int id){
        userService.del(id);
    }

    @RequestMapping("/save")
    public User save(User user){
        return userService.save(user);
    }

}

启动类

package com.newbe;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @Auther: Newbe
 * @Date: 2019/9/25 00:05
 * @Description:
 */
@SpringBootApplication
public class UserApp {

    public static void main(String[] args) {

        SpringApplication.run(UserApp.class,args);
    }
}

项目结构:

以上代码的项目地址:https://gitee.com/fbyluohua/SwaggerStudy.git   以上是源代码,后面直接对源代码进行使用Swagger生成文档

4.配置Swagger信息

新建config文件夹

SwaggerConfiguration.java
package com.newbe.comfig;
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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

 @Bean
 public Docket createRestApi() {
     return new Docket(DocumentationType.SWAGGER_2)
     .apiInfo(apiInfo())
     .select()
//扫描端口
     .apis(RequestHandlerSelectors.basePackage("com.newebe"))
     .paths(PathSelectors.any())
     .build();
 }

 private ApiInfo apiInfo() {
     return new ApiInfoBuilder()
     .title("swagger-bootstrap-ui RESTful APIs")
     .description("swagger-bootstrap-ui")
     .termsOfServiceUrl("http://localhost:8999/")
     .contact("1160285648@mail.com")
     .version("1.0")
     .build();
 }
}

启动项目,在浏览器输入:http://localhost:8090/doc.html

以上表示swagger界面生成成功,接着需要配置注释来生成API文档

5.添加swagger注解

为controller层添加注解

**
 * @Auther: Newbe
 * @Date: 2019/9/24 23:58
 * @Description:
 */
@Api(value="用户接口",description = "用户信息接口")
@RestController
public class UserController {

    @Autowired
    private UserService userService;
    @ApiOperation(value="根据id获取用户信息",notes="方法备注说明")
    @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "编号", required = true) })
    @RequestMapping(value = "/findUserById", method=RequestMethod.GET )
    public Optional<User> getUserById(int id){
        return userService.getUserById(id);
    }
    @ApiOperation(value="查询所有用户信息",notes="方法备注说明")
    @RequestMapping(value = "/findAll", method=RequestMethod.GET  )
    public List<User> findUserAll(){
        return userService.getUserAll();
    }

    @ApiOperation(value="根据id删除用户信息",notes="方法备注说明")
    @RequestMapping(value ="/del", method=RequestMethod.GET)
    public void del(int id){
        userService.del(id);
    }

    @ApiOperation(value="保存用户信息",notes="方法备注说明")
    @RequestMapping(value ="/save",method=RequestMethod.GET)
    public User save(User user){
        return userService.save(user);
    }

}

为实体层添加注解

/**
 * @Auther: Newbe
 * @Date: 2019/9/24 10:34
 * @Description:
 */
@ApiModel(value = "User",description = "用户信息")
@Entity
public class User {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @ApiModelProperty(value = "用户ID",name = "id")
    private  Integer id;

    @ApiModelProperty(value = "用户名",name = "userName")
    private  String username;

    @ApiModelProperty(value = "密码",name = "password")
    private  String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return username;
    }

    public void setUserName(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

6.生成API文档

启动项目,在浏览器输入:http://localhost:8090/doc.html

展开用户接口

测试接口

测试成功,其他接口也一样这样测试

关于项目代码

7.关于API接口详解

请参考:https://blog.csdn.net/xiaojin21cen/article/details/78654652

在spring Boot中使用swagger-bootstrap-ui(原文)的更多相关文章

  1. Spring Boot中使用Swagger CodeGen生成REST client

    文章目录 什么是Open API规范定义文件呢? 生成Rest Client 在Spring Boot中使用 API Client 配置 使用Maven plugin 在线生成API Spring B ...

  2. Spring Boot 中使用 Swagger

    前后端分离开发,后端需要编写接⼝说明⽂档,会耗费⽐较多的时间. swagger 是⼀个⽤于⽣成服务器接⼝的规范性⽂档,并且能够对接⼝进⾏测试的⼯具. 作用 ⽣成接⼝说明⽂档 对接⼝进⾏测试 使用步骤 ...

  3. spring boot 中使用swagger 来自动生成接口文档

    1.依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swa ...

  4. spring boot 中使用swagger

    一.pom.xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox ...

  5. 【swagger】1.swagger提供开发者文档--简单集成到spring boot中【spring mvc】【spring boot】

    swagger提供开发者文档 ======================================================== 作用:想使用swagger的同学,一定是想用它来做前后台 ...

  6. 在Spring Boot中使用swagger-bootstrap-ui

    在Spring Boot中使用swagger-bootstrap-ui swagger-bootstrap-ui是基于swagger接口api实现的一套UI,因swagger原生ui是上下结构的,在浏 ...

  7. Spring Boot中使用Swagger2构建RESTful APIs介绍

    1.添加相关依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <depen ...

  8. Spring Boot 快速整合Swagger

    一.前言 Spring Boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  9. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

随机推荐

  1. mui 时间选择器和上传图片

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

  2. linux-mysql-主从同步

    什么是二进制日志binlog:记录着mysql数据库中的一些写入性操作,比如一些增删改,但不包括查询!二进制日志有哪些功能:数据复制和数据恢复的功能 查看网络状态:netstat -natp查看mas ...

  3. mybatis第二天01

    MyBatis第二天01 1.高级结果映射 1.1根据视频案例,分析表之间的关系 数据模型分析 1. 明确每张表存储的信息 2. 明确每张表中关键字段(主键.外键.非空) 3. 明确数据库中表与表之间 ...

  4. python2.6升级python2.7后,yum不能用了,如何解决

    背景: 跑python的case时候,发现log功能不好用,于是升级了python2.6-->python2.7 but,升级之后,发现yum命令不好用了.怎么办? 百度搜了一下,如何解决: 参 ...

  5. php执行shell脚本

    本次想要配置webhook钩子,   做钩子大多是走 ssh 协议, coding 里配置部署公钥   之前用 docker 写钩子, 也是 ssh 权限的问题   包工具: 1.composer r ...

  6. 一步步教你如何在Ubuntu虚拟机中安装QEMU并模拟模拟arm 开发环境(一)uImage u-boot(转)

    初次接触qemu是因为工作的需要,有时候下了班,可能需要在家研究一些东西,因为博主用到arm环境,这时候博主比较小气,不愿花钱买开发板,当然博主在这里给大家的建议是,如果要真正学懂arm构架的相关知识 ...

  7. js集合

    var list = {};//声明 List[0] = 52;//赋值 List[1] = 57;//赋值

  8. Docker最全教程——从理论到实战(十一)

    前言 容器教程的路还很长,笔者尽量根据实践来不断地完善.由于在编写的过程中还会有完善和补充,后续可能会以番外来补充. 接下来会分享TeamCity.树莓派等内容,节奏可能会有点跳脱. 另外,长沙.NE ...

  9. vs2019清空输入缓冲区

    发现用cin.sync()在vs2019中不能清空输入缓冲区,以前的vs版本没试过,我看别人在vc中用cin.sync()可以清除,估计是IDE的问题..以下是我学习C++四个多月写的一整段代码 运行 ...

  10. Android开发之JDK配置,及ADT下载

    第一步: 到官网上下载jdk,记住关键的一点,首先要查看自己的windows电脑是32位的还是64位的,这里想下载相应的位数的jdk 第二步: 安装JDK,一般默认安装路径,不做自己修改安装路径,如: ...