SpringBoot項(xiàng)目集成Smart-Doc的實(shí)戰(zhàn)指南
為什么我放棄了SpringDoc OpenAPI
在我們開(kāi)發(fā) Spring Boot 項(xiàng)目中,相信很多小伙伴最初都是選擇 SpringDoc OpenAPI (Swagger3) 來(lái)生成接口文檔。博主之前也寫(xiě)了一篇整合SpringDoc OpenAPI的文章,感興趣的可以查閱 SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細(xì)過(guò)程

SpringDoc OpenAPI 它可以通過(guò)注解自動(dòng)生成交互式文檔(Swagger UI),你是不是覺(jué)的也挺方便挺好的,實(shí)際上當(dāng)項(xiàng)目規(guī)模逐漸增大、功能需求不斷更新后,你就會(huì)慢慢發(fā)現(xiàn)以下這類問(wèn)題:
1、代碼侵入性強(qiáng)
需要大量 @Schema、@Operation、@ApiResponse 等注解來(lái)完善文檔,增加代碼耦合和維護(hù)負(fù)擔(dān)!
常見(jiàn)的注解示例如下:
當(dāng)業(yè)務(wù)功能有所調(diào)整,我們也需要一并對(duì)注解進(jìn)行修改
import com.toher.springdoc.bean.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import org.springframework.web.bind.annotation.*;
/**
* @Author 麥可樂(lè)
* @Date 2025/10/20 11:17 AM
* @Version 1.0
*/
@RestController
@RequestMapping("/api/users")
public class UserController {
@Operation(summary = "獲取用戶信息接口", description = "通過(guò)用戶ID獲取用戶信息")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "用戶信息",
content = {@Content(mediaType = "application/json",
schema = @Schema(implementation = User.class))}),
@ApiResponse(responseCode = "404", description = "無(wú)法獲取用戶信息")
})
@GetMapping("/{id}")
public User getUserById(@Parameter(description = "用戶ID") @PathVariable Long id) {
//模擬數(shù)據(jù)庫(kù)獲取用戶
User user = new User();
user.setId(1L);
user.setName("張三");
user.setEmail("zhansan@qq.com");
return user;
}
}
2、運(yùn)行依賴問(wèn)題
目前大多數(shù)企業(yè)都是前后端協(xié)同開(kāi)發(fā)的,而SpringDoc OpenAPI 生成接口文檔依賴項(xiàng)目運(yùn)行環(huán)境(即需要 Spring 啟動(dòng)),意味著文檔無(wú)法離線生成,CI/CD 集成麻煩。
3、多模塊支持問(wèn)題
很多時(shí)候我們的項(xiàng)目都是基于多模塊的,如一個(gè) SpringBoot 項(xiàng)目中包含了前端API模塊和后端API模塊,那么我們分別就需要啟動(dòng)前端API服務(wù)和后端API服務(wù),SpringDoc 很難整合多個(gè)模塊接口,需要手動(dòng)聚合
Smart-Doc 的出現(xiàn):讓接口文檔真正無(wú)侵入
直到博主發(fā)現(xiàn)了Smart-Doc,它最大的特點(diǎn)是——無(wú)需啟動(dòng)項(xiàng)目、無(wú)需注解,通過(guò)靜態(tài)源碼分析生成接口文檔,官方文檔地址:https://smart-doc-group.github.io/zh/

Smart-Doc核心特點(diǎn)
- 零侵入:完全基于注釋信息生成文檔,實(shí)現(xiàn)代碼零侵入
- 接口多樣性:支持為Java RESTful API、Java WebSocket、Apache Dubbo RPC和gRPC接口生成文檔
- 框架多樣性:支持 Spring Boot、JAX-RS、Solon等多種框架
- 文檔豐富:支持生成 HTML、Asciidoc、Markdown、OpenAPI、Swagger、Postman、Word 等多種格式的文檔
- 支持拓展:支持用戶使用 Java SPI 對(duì)支持框架進(jìn)行擴(kuò)展
- 文檔協(xié)作管理:Smart-Doc 和 Torna 結(jié)合形成行業(yè)領(lǐng)先的文檔解決方案
SpringBoot快速整合smart-doc
為了讓大家迅速掌握smart-doc,我們先從最簡(jiǎn)單的單模塊 Spring Boot 項(xiàng)目開(kāi)始
項(xiàng)目結(jié)構(gòu)示例
小伙伴們自行構(gòu)建SpringBoot項(xiàng)目,博主的項(xiàng)目結(jié)構(gòu)如下:

添加 Maven 插件
在 pom.xml 中加入 Smart-Doc 插件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.toher</groupId>
<artifactId>smart-doc-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>smart-doc-demo</name>
<description>smart-doc-demo</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.ly.smart-doc</groupId>
<artifactId>smart-doc-maven-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<configFile>./src/main/resources/smart-doc.json</configFile>
<projectName>${project.description}</projectName>
</configuration>
<executions>
<execution>
<!--如果不需要在執(zhí)行編譯時(shí)啟動(dòng)smart-doc,則將phase注釋掉-->
<phase>compile</phase>
<goals>
<!--smart-doc提供了html、openapi、markdown等goal,可按需配置-->
<goal>html</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
添加Smart-Doc配置文件
本文主要給大家演示如何快速接入Smart-Doc,更多配置文件項(xiàng)說(shuō)明請(qǐng)參考官方文檔 https://smart-doc-group.github.io/zh/guide/advanced/config
在resources目錄下創(chuàng)建smart-doc.json
{
"outPath": "src/main/resources/static/doc",
"projectName": "SmartDoc Demo",
"allInOne": true,
"serverUrl": "http://localhost:8080",
"packageFilters": "com.toher.smartdocdemo.controller",
"sourceCodePaths": [
{
"path": "src/main/java",
"desc": "Main Source"
}
]
}
編寫(xiě)實(shí)體類User
/**
* 用戶實(shí)體類
*
* @Author: micro麥可樂(lè)
* @Date: 2025/10/20 18:59
*
**/
@Data
@AllArgsConstructor
public class User {
/**
* 用戶ID主鍵
*/
private Long id;
/**
* 用戶名稱
*/
private String name;
}
編寫(xiě)Controller
/**
* 用戶管理接口
* @Author: micro麥可樂(lè)
* @Date: 2025/10/20 18:59
*/
@RestController
@RequestMapping("/users")
public class UserController {
/**
* 獲取用戶列表
* @return 返回用戶列表
*/
@GetMapping
public List<User> list() {
List<User> list = new ArrayList<>();
list.add(new User(1L, "Alice"));
list.add(new User(2L, "Bob"));
return list;
}
/**
* 創(chuàng)建用戶
* @param user
* @return 返回創(chuàng)建用戶
*/
@PostMapping
public User create(@RequestBody User user) {
user.setId(3L);
return user;
}
/**
* 根據(jù)ID獲取用戶信息
* @param id 用戶ID
* @return 返回用戶對(duì)象
*/
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return new User(id, "張三");
}
}
運(yùn)行生成文檔
生成文檔命令
mvn smart-doc:html
通過(guò)IDEA maven生成

文檔最終生成效果

結(jié)語(yǔ)
通過(guò)本文的講解以及快速集成案例,相信小伙伴們已經(jīng)掌握了在 SpringBoot 項(xiàng)目中整合smart-doc的方法。smart-doc 的零侵入特性讓我們的代碼更加整潔,基于注釋的文檔生成方式也更符合開(kāi)發(fā)者的習(xí)慣。趕緊在項(xiàng)目中嘗試使用smart-doc,體驗(yàn)它帶來(lái)的便捷和高效吧!
以上就是SpringBoot項(xiàng)目集成Smart-Doc的實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot集成Smart-Doc的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
@annotation?AOP編程的pointcut定義方式
文章介紹通過(guò)注解簡(jiǎn)化AOP復(fù)雜結(jié)構(gòu)定義,避免繁瑣的邏輯組合,提升開(kāi)發(fā)效率,并展示IDE如何輔助查看切入點(diǎn)匹配2025-08-08
spring boot 防止重復(fù)提交實(shí)現(xiàn)方法詳解
這篇文章主要介紹了spring boot 防止重復(fù)提交實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了spring boot 防止重復(fù)提交具體配置、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11
解決Java中由于數(shù)據(jù)太大自動(dòng)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法的問(wèn)題
今天小編就為大家分享一篇解決Java中由于數(shù)據(jù)太大自動(dòng)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
MyBatis高級(jí)映射ResultMap解決屬性問(wèn)題
對(duì)于數(shù)據(jù)庫(kù)中對(duì)表的增刪改查操作,我們知道增刪改都涉及的是單表,而只有查詢操作既可以設(shè)計(jì)到單表操作又可以涉及到多表操作,所以對(duì)于輸入映射parameterType而言是沒(méi)有所謂的高級(jí)映射的,也就是說(shuō)高級(jí)映射只針對(duì)于輸出映射2023-02-02
springboot+shiro+jwtsession和token進(jìn)行身份驗(yàn)證和授權(quán)
最近和別的軟件集成項(xiàng)目,需要提供給別人接口來(lái)進(jìn)行數(shù)據(jù)傳輸,發(fā)現(xiàn)給他token后并不能訪問(wèn)我的接口,拿postman試了下還真是不行,檢查代碼發(fā)現(xiàn)項(xiàng)目的shiro配置是通過(guò)session會(huì)話來(lái)校驗(yàn)信息的,修改代碼兼容token和session2024-06-06
Java Javassist輕松操作字節(jié)碼的技術(shù)指南
Javassist 是一個(gè) Java 庫(kù),允許你在運(yùn)行時(shí)定義新類或修改現(xiàn)有類文件,本文主要為大家詳細(xì)介紹了如何使用Javassist輕松操作字節(jié)碼,感興趣的小伙伴可以參考一下2025-04-04

