前言
SpringBoot
接口文档中, 大多是集成 swagger
文档来实现, 代码侵入性比较高, 下边是基于标准的 Javadoc
实现的接口文档, 数据结构基于 OpenAPI
, UI基于 swagger-ui
springdoc
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| <?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>
<groupId>cn.idea360</groupId> <artifactId>spring-restdoc</artifactId> <version>0.0.1</version>
<name>spring-restdoc</name> <description>spring-restdoc</description> <url>https://idea360.cn</url>
<developers> <developer> <name>cuishiying</name> <email>idea360@foxmail.com</email> </developer> </developers>
<properties> <java.version>11</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.13</spring-boot.version> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-javadoc</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>com.github.therapi</groupId> <artifactId>therapi-runtime-javadoc-scribe</artifactId> <version>0.15.0</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>cn.idea360.restdoc.SpringRestdocApplication</mainClass> <skip>true</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
</project>
|
application.properties
1 2 3 4 5
| server.port=8080
logging.level.root=info logging.level.org.springdoc=debug
|
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| package cn.idea360.restdoc.model;
import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema;
public class User {
@JsonProperty("username") private String username;
@JsonProperty("age") private int age;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package cn.idea360.restdoc.web;
import cn.idea360.restdoc.model.User; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map;
@RequestMapping("/doc") @RestController public class DocController {
@CrossOrigin @RequestMapping(value = "/info", method = {RequestMethod.GET, RequestMethod.POST}) public Object info(@RequestParam String username, HttpServletRequest request) { System.out.println(username); System.out.println(request.getHeader("host")); Map<String, Object> map = new HashMap<>(); map.put("username", username); Map<String, Object> c = new HashMap<>(); c.put("k1", "v1"); map.put("detail", c); return map; }
@PostMapping("/add") public Object add(@RequestBody User user, @RequestParam Boolean enable) { return user; } }
|
测试
访问 http://localhost:8080/swagger-ui.html 即可看到接口文档
smart-doc
pom.xml
配置插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <plugin> <groupId>com.github.shalousun</groupId> <artifactId>smart-doc-maven-plugin</artifactId> <version>2.4.8</version> <configuration> <configFile>./src/main/resources/smart-doc.json</configFile> <projectName>${project.description}</projectName> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>html</goal> </goals> </execution> </executions> </plugin>
|
./src/main/resources/smart-doc.json
增加配置文件
1 2 3
| { "outPath": "E:\\source\\spring-restdoc\\src\\main\\resources\\doc" }
|
生成接口文档
1
| mvn -D"file.encoding"=UTF-8 smart-doc:html
|