SpringBoot 引入 smart-doc 接口文档管理插件,以及统一接口返回,最后推送到 Torna,进行统一管理

简介: 本文介绍了如何在SpringBoot项目中整合smart-doc接口文档管理插件,实现接口文档的生成和统一管理,并展示了如何将文档推送到Torna接口文档管理系统进行进一步的集中管理。

最近在将多个服务端项目的接口进行整合管理,原本使用的是Swagger接口文档管理插件,网上搜了一下类似的插件,发现这个smart-doc插件,似乎挺简约优雅的,而且还可以推送接口文档到Torna,进行统一管理,这功能相当不错。

smart-doc 官网文档(https://smart-doc-group.github.io/

smart-doc 发行版本:https://github.com/smart-doc-group/smart-doc/releases

一、SpringBoot项目整合smart-doc接口文档管理插件

1、引入 smart-doc 插件

pom.xml

<!-- 引入 smart-doc 插件 -->
<plugin>
    <groupId>com.github.shalousun</groupId>
    <artifactId>smart-doc-maven-plugin</artifactId>
    <version>2.6.4</version>
    <configuration>
        <!-- 指定生成文档使用的配置文件 -->
        <configFile>./src/main/resources/smart-doc.json</configFile>
        <projectName>欢迎使用 Smart-Doc~</projectName>
    </configuration>
</plugin>
<!-- / 引入 smart-doc 插件 -->

2、新建接口文档配置文件

smart-doc.json

{
   
   
  "serverUrl": "http://127.0.0.1:8091",
  "isStrict": false,
  "allInOne": true,
  "createDebugPage": true,
  "style":"xt256",
  "allInOneDocFileName":"index.html",
  "outPath": "src/main/resources/static/doc",
  "packageFilters": "org.example.controller.*",
  "style": "mono-blue",
  "projectName": "欢迎使用 smart-doc ~"
}

3、新建静态资源配置文件

StaticResourceConfig.java

package org.example.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class StaticResourceConfig extends WebMvcConfigurationSupport {
   
   

    @Value("${system.upload-file-path}")
    private String UploadFilePath;

    public void addResourceHandlers(ResourceHandlerRegistry registry) {
   
   
        /* ^ 配置 static 静态资源路径 */
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        /* / 配置 static 静态资源路径 */

        /* ^ 配置 文件上传 资源路径 */
        registry.addResourceHandler("/UploadFilePath/**").addResourceLocations("file:" + UploadFilePath);
        /* / 配置 文件上传 资源路径 */

        /* ^ 配置 smart-doc 资源路径 */
        registry.addResourceHandler("/doc/**").addResourceLocations("classpath:/static/doc/");
        /* / 配置 smart-doc 资源路径 */
    }
}

4、若有使用拦截器等等,需要放行"/doc/**"请求路径,然后APP配置文件也不用配置啥的

application.yml

server:
  port: 8091

spring:
  application:
    name: "帅龍之龍"

# 自定义配置
system:
  # 配置文件上传路径
  upload-file-path: "C:/UploadFilePath/"

二、统一接口返回

1、新建统一接口返回类文件

Result.java

package org.example.pojo.response;

public class Result <T> {
   
   

    /**
     * 响应状态
     * @since 1.0.0
     */
    private boolean success = true;

    /**
     * 错误码
     * @since 1.0.0
     */
    private int errno = 0;

    /**
     * 响应消息
     * @since 1.0.0
     */
    private String msg;

    /**
     * 响应数据
     * @since 1.0.0
     */
    private T data;

    public Result(boolean success, String msg) {
   
   
        this.success = success;
        this.msg = msg;
    }

    public Result(boolean success, String msg, T data) {
   
   
        this.success = success;
        this.msg = msg;
        this.data = data;
    }

    public Result(boolean success, int errno, String msg) {
   
   
        this.success = success;
        this.errno = errno;
        this.msg = msg;
    }

    public Result(boolean success, int errno, String msg, T data) {
   
   
        this.success = success;
        this.errno = errno;
        this.msg = msg;
        this.data = data;
    }

    public boolean getSuccess() {
   
   
        return success;
    }

    public void setSuccess(boolean success) {
   
   
        this.success = success;
    }

    public int getErrno() {
   
   
        return errno;
    }

    public void setErrno(int errno) {
   
   
        this.errno = errno;
    }

    public String getMsg() {
   
   
        return msg;
    }

    public void setMsg(String msg) {
   
   
        this.msg = msg;
    }

    public T getData() {
   
   
        return data;
    }

    public void setData(T data) {
   
   
        this.data = data;
    }

    @Override
    public String toString() {
   
   
        return "Result{" +
                "success=" + success +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

2、新建用户视图类

User.java

package org.example.pojo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.Date;

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
   
   

    /**
     * 用户ID
     */
    private Long id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 用户密码
     */
    private String password;

    /**
     * 用户地址
     */
    private String address;

    /**
     * 用户年龄
     */
    private int userAge;

    /**
     * 手机号
     */
    private String phone;

    /**
     * 创建时间
     */
    private Date createTime;
}

3、新建用户信息管理控制器

UserManageController.java

package org.example.controller;

import lombok.extern.slf4j.Slf4j;
import org.example.pojo.entity.User;
import org.example.pojo.response.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 用户管理模块
 */
@Slf4j
@RestController
@RequestMapping(value = "/v1/api")
public class UserManageController {
   
   

    @Value("${system.upload-file-path}")
    private String UploadFilePath;

    /**
     * 根据用户ID查询用户信息
     * @author 帅龍之龍
     * @param token 鉴权凭据
     * @param userId 用户ID 示例:10001
     * @return
     */
    @GetMapping(value = "getUserById")
    @CrossOrigin
    @ResponseBody
    public Result getUserById(@RequestHeader("auth-token") String token,
                              @RequestParam(value = "userId", defaultValue = "10001") Long userId) {
   
   
        log.info(token);
        User user = new User();
        user.setId(userId);
        user.setUsername("帅龍之龍");
        user.setPassword("123456");
        user.setUserAge(25);
        user.setPhone("134****3051");
        user.setCreateTime("2023-3-14 15:05:44");
        user.setAddress("地球村");
        return new Result(true, "getUserById 成功", user);
    }

    /**
     * 保存用户信息
     * @author 帅龍之龍
     * @param token 鉴权凭据
     * @param user 用户对象
     * @return
     */
    @PostMapping(value = "saveUser")
    @CrossOrigin
    public Result saveUser(@RequestHeader("auth-token") String token,
                           @RequestBody User user) {
   
   
        log.info(token, user.toString());
        return new Result(true, "saveUser 成功", user);
    }

    /**
     * 单文件上传
     * @author 帅龍之龍
     * @param token 鉴权凭据
     * @param file 文件
     * @return
     */
    @ResponseBody
    @PostMapping(value = "singleFileUploadAction")
    @CrossOrigin
    public Result singleFileUploadAction(@RequestHeader("auth-token") String token,
                                         @RequestParam MultipartFile file) {
   
   
        log.info(token);
        try {
   
   
            String originFileName = file.getOriginalFilename(); // 原文件名,如:hello.pdf
            String destFileName = UploadFilePath + File.separator + originFileName; // 完整文件名 = 存储路径 + 原文件名

            // 复制文件到指定目录
            File destFile = new File(destFileName);
            destFile.getParentFile().mkdirs();
            file.transferTo(destFile);

            // 文件链接
            String url = "http://localhost:8091/UploadFilePath/" + originFileName;

            return new Result(true, "singleFileUploadAction 成功", url);
        } catch (FileNotFoundException e) {
   
   
            e.printStackTrace();
            return new Result(false, "singleFileUploadAction 失败", e.getMessage());
        } catch (IOException e) {
   
   
            e.printStackTrace();
            return new Result(false, "singleFileUploadAction 失败", e.getMessage());
        }
    }
}

三、smart-doc页面效果

四、如果你觉得还不够,还想统一管理所有接口文档,那就可以推送到 Torna 接口文档管理系统进行统一管理,不妨试试。

首先是在 Torna 官网(https://torna.cn/),下载源码,源码有前端Vue项目,后端SpringBoot项目,数据库文件等。

本地启动好了 Torna 后,按照官网上指导说明,登录 Torna,创建应用啥的,然后在自己项目的 smart-doc.json 配置文件加入相关键值对,如下面所示。

"appToken": "80820f95cf4649609b25fd440a9f9446",
"openUrl": "http://127.0.0.1:7700/api",
"debugEnvName": "调试环境",
"debugEnvUrl": "http://127.0.0.1:8091",
"replace": true

Smart-Doc推送到 Torna 详细说明(https://smart-doc-group.github.io/#/zh-cn/?id=smart-doc

目录
相关文章
|
4月前
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
363 56
Spring Boot 的接口限流算法
|
7月前
|
JSON Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
本文详细介绍了Swagger2的使用方法,包括在Spring Boot项目中的配置与应用。重点讲解了Swagger2中常用的注解,如实体类上的`@ApiModel`和`@ApiModelProperty`,Controller类上的`@Api`、`@ApiOperation`以及参数上的`@ApiParam`等。通过示例代码展示了如何为实体类和接口添加注解,并在页面上生成在线接口文档,实现接口测试。最后总结了Swagger的优势及其在项目开发中的重要性,提供了课程源代码下载链接供学习参考。
411 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
|
7月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
734 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
4月前
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
464 44
|
7月前
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
220 0
|
7月前
|
前端开发 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档—— Swagger 简介
第6课介绍了在Spring Boot中集成Swagger2以展示在线接口文档的方法。随着前后端分离架构的发展,API文档成为连接前端与后端开发的重要纽带。然而,代码更新频繁导致文档难以同步维护,Swagger2解决了这一问题。通过Swagger,在线API文档不仅方便了接口调用方查看和测试,还支持开发者实时测试接口数据。本文使用Swagger 2.2.2版本,讲解如何在Spring Boot项目中导入并配置Swagger2工具,从而高效管理接口文档。
229 0
|
4月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
620 1
Spring boot 使用mybatis generator 自动生成代码插件
|
4月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
494 1
|
8月前
|
监控 Java Spring
SpringBoot:SpringBoot通过注解监测Controller接口
本文详细介绍了如何通过Spring Boot注解监测Controller接口,包括自定义注解、AOP切面的创建和使用以及具体的示例代码。通过这种方式,可以方便地在Controller方法执行前后添加日志记录、性能监控和异常处理逻辑,而无需修改方法本身的代码。这种方法不仅提高了代码的可维护性,还增强了系统的监控能力。希望本文能帮助您更好地理解和应用Spring Boot中的注解监测技术。
261 16
|
12月前
|
存储 安全 Java