用GitHub项目smart-doc生成接口文档

本文介绍如何使用smart-doc工具快速生成项目接口文档,包括Maven配置、代码实现及文档输出设置等关键步骤。
部署运行你感兴趣的模型镜像

前言

利用smart-doc生成一个接口文档,关于它的优点什么的就不多说了。
项目地址:https://github.com/shalousun/smart-doc

具体使用

maven引用

<dependency>
    <groupId>com.github.shalousun</groupId>
    <artifactId>smart-doc</artifactId>
    <version>1.7.6</version>
    <scope>test</scope>
</dependency>

具体代码


import org.junit.Test;

import com.power.common.util.DateTimeUtil;
import com.power.doc.builder.AdocDocBuilder;
import com.power.doc.builder.ApiDocBuilder;
import com.power.doc.builder.HtmlApiDocBuilder;
import com.power.doc.model.ApiConfig;
import com.power.doc.model.ApiDataDictionary;
import com.power.doc.model.ApiErrorCode;
import com.power.doc.model.ApiReqHeader;
import com.power.doc.model.RevisionLog;
import com.power.doc.model.SourceCodePath;

/**
 * 接口文档生成测试类
 * 
 * @author yunwq
 * @since 2019/11/18
 */
public class ApiDocTest {

	/**
	 * 测试方法
	 */
	@Test
	public void testBuilderControllersApiSimple() {
		ApiConfig config = new ApiConfig();
		// 接口地址
        config.setServerUrl("http://localhost:8080");
        // 严格模式
        config.setStrict(true);
        // 是否生成到一个文档中
        config.setAllInOne(true);
        // 文档输出地址
        config.setOutPath("d:\\1000");
        // 覆盖文件
        config.setCoverOld(true);
        // 读取项目源码地址
        config.setSourceCodePaths(
            // smart-doc对路径自动会做处理,无论是window合适linux系统路径,直接拷贝贴入即可。可以把该生成方法添加到具体项目中生成,也可以作为一个单独项目。
            // SourceCodePath.path().setDesc("本项目代码").setPath("src/main/java"),
    		SourceCodePath.path().setDesc("加载外部项目源码").setPath("D:\\workspace\\helloword\\src\\main\\java")
        );
        config.setProjectName("Your project name");
        // 扫描包的过滤器
        config.setPackageFilters("com.yunwq.member.controller");
        long start = System.currentTimeMillis();
        // 生成adoc文件
        // AdocDocBuilder.builderControllersApi(config);
        // 生成md文件
        // ApiDocBuilder.builderControllersApi(config);
        // 生成html文件
        HtmlApiDocBuilder.builderControllersApi(config);
        long end = System.currentTimeMillis();
        DateTimeUtil.printRunTime(end, start);
    }
}

后记

项目使用比较简单,但是关键在于把要生成接口文档的项目源码读取到(千万别像我刚开始以为需要把要生成接口文档的项目启动,通过请求接口生成文档),即下边这段代码

// 读取项目源码地址
config.setSourceCodePaths(
    SourceCodePath.path().setDesc("项目描述").setPath("项目地址")
);

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

<think>我们面对的问题是:使用smart-doc生成文档时,未包含接口中以字符串格式返回的user对象字段介绍。 根据用户提供的引用[1]和[2],我们知道smart-doc是一个API文档生成工具,它可以通过解析代码注释和结构来生成文档。 用户提到接口返回的是字符串格式,但该字符串实际上是一个JSON格式的user对象,并且已经提供了明确的返回格式(如示例中的JSON)。 然而,在生成的文档中,这个user对象的字段没有被自动解析出来。这是因为smart-doc通常依赖于代码中的实体类(如Java的POJO)来生成字段说明,而如果接口返回的是字符串(例如直接返回JSON字符串),smart-doc无法直接解析字符串内部结构。 解决思路: 1. 使用smart-doc的`@apiResponse`标签:在接口方法上使用`@apiResponse`标签,手动描述返回的JSON结构。 2. 将字符串返回改为对象返回:修改代码,让接口返回一个具体的对象(如User对象),这样smart-doc就能自动生成字段说明。 3. 使用smart-doc的`@apiNote`标签:在`@apiNote`中详细描述返回的JSON字符串结构,但这样可能不够结构化。 根据引用[1]中提到的tag: - `@param`:用于描述参数 - `@deprecated`:标记过时 - `@apiNote`:用于详细描述,所以我们可以用`@apiNote`来写返回的JSON示例和说明,但这样不会生成结构化的字段表格。 更好的方法是使用`@apiResponse`标签(如果smart-doc支持)或者使用smart-doc的响应注解(如`@ApiResponse`)来指定返回的实体类,即使返回类型是字符串,我们也可以告诉smart-doc这个字符串实际上是什么结构。 但是,根据smart-doc的文档,它通常要求方法返回一个具体的对象。因此,建议的解决方案是: 方案1(推荐):修改接口返回类型为User对象,这样smart-doc会自动生成文档。 方案2:如果无法修改返回类型(必须返回字符串),则可以通过在接口方法上使用`@apiResponse`标签来手动描述响应体。 具体步骤: 方案1:修改返回类型 - 将原本返回字符串的接口改为返回User对象(例如,在Spring中返回`ResponseEntity<User>`或直接返回`User`)。 - 然后在User类的字段上使用Javadoc注释,例如: public class User { /** * 用户唯一标识 */ private Long id; /** * 用户登录名 */ private String username; // 其他字段... } - 这样smart-doc生成文档时就会自动提取User类的字段注释。 方案2:使用`@apiResponse`标签(如果smart-doc支持)或`@apiNote`标签 - 在接口方法上添加注释,例如: /** * 获取用户信息 * * @param id 用户ID * @return 用户信息JSON字符串 * @apiResponse { * "id": "用户唯一标识", * "username": "用户登录名", * "email": "用户电子邮箱", * "status": "用户状态(ACTIVE, INACTIVE, LOCKED, DELETED)" * } */ - 但是,这种方式可能不会生成结构化的字段表格,而只是以文本形式展示。 然而,根据smart-doc的官方文档,它提供了一个`@apiResponse`标签(或者类似的机制)来指定响应体。但是,在引用[1]中并没有提到`@apiResponse`,只提到了`@apiNote`。因此,我们需要查看smart-doc的更多文档。 实际上,smart-doc有一个`@apiResp`标签(或者`@apiResponse`)用于描述响应字段。但根据引用[1]中提供的tag列表,并没有这个tag。所以,我们可能需要查看smart-doc的更多文档。 但是,根据用户提供的引用有限,我们只能基于已有的引用。因此,我们可以尝试以下替代方案: 使用`@apiNote`标签来提供返回示例和说明,然后在返回类型为字符串的情况下,smart-doc不会解析内部结构,所以我们需要手动在`@apiNote`中描述。 另外,smart-doc还支持使用`@apiBody`(用于请求体)和`@apiResp`(用于响应体)的标签,但这些在引用[1]中未列出。因此,我们可能需要考虑使用smart-doc的注解方式,例如使用`@ApiModel`和`@ApiModelProperty`(但这是swagger的注解,smart-doc也支持)?但是用户没有提到使用这些注解。 根据smart-doc的官方文档(虽然引用中没有,但我们可以根据经验),smart-doc支持在方法的Javadoc中使用`@return`标签来描述返回信息,但是`@return`通常用于描述返回值的含义,而不是结构。 因此,如果用户不能改变返回类型,我们建议使用以下方式: 1. 在接口方法的注释中,使用`@apiNote`标签提供返回示例,并使用Markdown格式描述字段: @apiNote 返回示例: ```json { "id": 1, "username": "zhangsan", "email": "zhangsan@example.com", "status": "ACTIVE" } ``` 字段说明: | 字段名 | 类型 | 说明 | |--------|------|------| | id | long | 用户唯一标识 | | ... | ... | ... | 2. 或者,使用smart-doc的`@apiResp`标签(如果支持的话): @apiResp {long} id 用户唯一标识 @apiResp {String} username 用户登录名 ... 但是,根据引用[1],smart-doc并没有提到`@apiResp`标签,所以可能不支持。因此,我们只能使用`@apiNote`来写表格。 然而,smart-doc有一个功能叫做“自定义注释扩展”,允许用户自定义标签和解析。但配置起来可能比较复杂。 综上所述,如果用户能够修改返回类型,强烈建议修改为返回对象。否则,只能通过`@apiNote`手动描述。 另外,引用[3]是关于字段映射选择的流程图,与当前问题无关,所以忽略。 因此,回答如下: </think> ### 解决 smart-doc 未解析字符串格式 user 对象字段的问题 当 smart-doc 无法解析接口中以字符串格式返回的 user 对象字段时,通常是由于以下原因及解决方案: --- ### 问题原因 1. **直接返回字符串** smart-doc 无法自动解析方法返回的字符串中的 JSON 结构,只能识别结构化对象(如 POJO)[^1]。 2. **缺少类型注解** 未在方法或字段上使用 smart-doc 支持的注解(如 `@ApiModelProperty`)说明数据结构。 3. **无实体类映射** 字符串内容没有对应的 Java 实体类,导致 smart-doc 无法提取字段信息。 --- ### 解决方案 #### 方法 1:改用结构化对象返回(推荐) 修改接口返回类型为实体类,让 smart-doc 自动解析字段: ```java /** * 获取用户信息 * @param id 用户ID * @return 用户对象 */ @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { // 业务逻辑 return userService.findById(id); } // 实体类添加注释 public class User { /** * 用户唯一标识 */ @ApiModelProperty(value = "用户ID", example = "1") private Long id; /** * 用户登录名 */ @ApiModelProperty(value = "登录名", example = "zhangsan") private String username; } ``` **效果**:smart-doc 自动生成字段说明表。 --- #### 方法 2:手动添加字段说明 当必须返回字符串时,在方法注释中使用 `@apiNote` 描述结构: ```java /** * 获取用户信息(字符串格式) * @param id 用户ID * @return JSON字符串格式的用户数据 * @apiNote 返回示例: * { * "id": 1, // 用户唯一标识 * "username": "zhangsan", // 用户登录名 * "email": "xx@example.com", // 电子邮箱 * "status": "ACTIVE" // 用户状态(ACTIVE/INACTIVE) * } */ @GetMapping("/users/{id}/raw") public String getUserRaw(@PathVariable Long id) { // 返回JSON字符串 } ``` **效果**:在文档中展示手动添加的字段说明。 --- #### 方法 3:配置 `smart-doc.json` 扩展 在 smart-doc 配置文件中添加自定义响应示例: ```json { "apiDataList": [{ "path": "/users/{id}/raw", "response": { "id": 1, "username": "示例用户名", "email": "示例邮箱", "status": "ACTIVE" } }] } ``` **效果**:强制为字符串接口添加响应示例[^2]。 --- ### 验证步骤 1. 添加 Maven 插件配置: ```xml <plugin> <groupId>com.github.shalousun</groupId> <artifactId>smart-doc-maven-plugin</artifactId> <version>2.5.1</version> <configuration> <configFile>./src/main/resources/smart-doc.json</configFile> </configuration> </plugin> ``` 2. 执行生成命令: ```bash mvn smart-doc:markdown ``` 3. 检查生成的 `docs/*.md` 文件是否包含字段说明 --- ### 最佳实践建议 1. **优先使用结构化对象** 避免直接返回字符串,采用 POJO 对象作为返回值[^1]。 2. **补充枚举说明** 为状态字段添加枚举类文档: ```java /** * 用户状态枚举 */ public enum UserStatus { ACTIVE("激活"), INACTIVE("未激活"), LOCKED("锁定"); } ``` 3. **敏感字段处理** 使用 `@JSONField(serialize = false)` 排除敏感字段(如密码)[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值