OpenAPI 3 Documentation With Spring Boot
在本教程中,我们将尝试启用Spring Boot Open API 3的REST项目,并探索其某些功能。 Springdoc-openapi Java库正迅速变得非常引人注目。
我们将参考https://spring.io/guides/gs/rest-service/和https://springdoc.org/。
先决条件:
Java8.x。
Maven3.x。
脚步
首先创建一个Maven JAR项目。 在下面,您将看到要使用的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 | <?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> spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath ></relativePath> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> sample</artifactId> <version>0.0.1</version> <name>sample</name> <description>Demo project for Spring Boot with openapi 3 documentation</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springdoc</groupId> springdoc-openapi-ui</artifactId> <version>1.2.32</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
请注意" springdoc-openapi-ui"依赖项和" springdoc-openapi-maven-plugin"插件。
现在,让我们创建一个小的Java bean类。
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 | package sample; import javax.validation.constraints.Email; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import org.hibernate.validator.constraints.CreditCardNumber; @XmlRootElement(name ="person") @XmlAccessorType(XmlAccessType.FIELD) public class Person { private long id; private String firstName; @NotNull @NotBlank private String lastName; @Pattern(regexp =".+@.+\\..+", message ="Please provide a valid email address") private String email; @Email() private String email1; @Min(18) @Max(30) private int age; @CreditCardNumber private String creditCardNumber; public String getCreditCardNumber() { return creditCardNumber; } public void setCreditCardNumber(String creditCardNumber) { this.creditCardNumber = creditCardNumber; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getEmail1() { return email1; } public void setEmail1(String email1) { this.email1 = email1; } @Size(min = 2) public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } |
这是Java Bean的示例。 现在,让我们创建一个控制器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package sample; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class PersonController { @RequestMapping(path ="/person", method = RequestMethod.POST) public Person person(@Valid @RequestBody Person person) { return person; } } |
上面是一个示例REST控制器。
让我们在 srcmain中输入一些内容
esourcesapplication.properties 。
1 2 3 | application-description=@project.description@ application-version=@project.version@ logging.level.org.springframework.boot.autoconfigure=ERROR |
以上条目会将与Maven构建相关的信息传递给OpenAPI文档。
最后,让我们编写spring boot应用程序类
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 | package sample; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; @SpringBootApplication public class SampleApplication { public static void main(String[] args) { SpringApplication.run(SampleApplication.class, args); } @Bean public OpenAPI customOpenAPI(@Value("${application-description}") String appDesciption, @Value("${application-version}") String appVersion) { return new OpenAPI() .info(new Info() .title("sample application API") .version(appVersion) .description(appDesciption) .termsOfService("http://swagger.io/terms/") .license(new License().name("Apache 2.0").url("http://springdoc.org"))); } } |
还要注意如何从application.properties中利用API版本和描述。
在这个阶段,这就是项目在Eclipse中的样子:
以上是项目内容。 接下来,从命令提示符或终端执行
您也可以通过从IDE运行SampleApplication.java类来启动应用程序。
现在,让我们访问Swagger UI-http:// localhost:8080 / swagger-ui.html:
点击绿色的发布按钮,并展开 Schemas 下的 Person 右侧的> 符号。
妙处是如何利用模型上的JSR-303注释自动详细制定合同。 它开箱即用地涵盖了许多重要的注释并记录了它们。 但是,我目前还没有看到它对现成的
为了完整起见,让我们发布一个请求。 按下试用按钮。
按下蓝色的执行按钮。
让我们输入一个有效的输入:
1 2 3 4 5 6 7 8 9 | { "id": 0, "firstName":"string", "lastName":"string", "email":"[email protected]", "email1":"[email protected]", "age": 20, "creditCardNumber":"4111111111111111" } |
让我们将有效输入输入到"请求正文"部分
按下蓝色的执行按钮后,我们将看到以下内容:
这只是对依赖项功能的简要介绍:
1 2 3 4 5 | <dependency> <groupId>org.springdoc</groupId> springdoc-openapi-ui</artifactId> <version>1.2.32</version> </dependency> |
故障排除技巧
确保先决条件。
如果使用Eclipse IDE,我们可能需要在创建所有文件之后对项目进行Maven更新。
在Swagger UI中,如果您无法访问"模式"定义链接,则可能是因为您需要退出"尝试"模式。 单击一个或两个可能显示的"取消"按钮。
源代码在这里:https://github.com/teq-niq/sample/tree/springdoc-openapi-intro.Git克隆URL:https://github.com/teq-niq/sample.git。分支:springdoc -openapi-intro。
另外,请阅读第二部分,网址为https://dzone.com/articles/doing-more-with-springdoc-openapi。