You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2024/07/08 03:20:11 UTC
(servicecomb-docs) branch master updated: improve using swagger apis (#341)
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-docs.git
The following commit(s) were added to refs/heads/master by this push:
new 2fdd856 improve using swagger apis (#341)
2fdd856 is described below
commit 2fdd8560baf8b45ab098ec4437545c55a5b3b40c
Author: liubao68 <bi...@qq.com>
AuthorDate: Mon Jul 8 11:20:06 2024 +0800
improve using swagger apis (#341)
---
.../zh_CN/docs/build-provider/springmvc.md | 194 +++++++++------------
.../docs/build-provider/swagger-annotation.md | 120 ++-----------
.../zh_CN/docs/spring-boot/diff-spring-mvc.md | 10 +-
java-chassis-reference/zh_CN/mkdocs.yml | 2 +-
4 files changed, 106 insertions(+), 220 deletions(-)
diff --git a/java-chassis-reference/zh_CN/docs/build-provider/springmvc.md b/java-chassis-reference/zh_CN/docs/build-provider/springmvc.md
index 2534fd0..e6e7d62 100644
--- a/java-chassis-reference/zh_CN/docs/build-provider/springmvc.md
+++ b/java-chassis-reference/zh_CN/docs/build-provider/springmvc.md
@@ -1,12 +1,7 @@
# 用 Spring MVC 开发微服务
Spring MVC 是 spring-web 项目定义的一套注解,开发者可以使用这套注解定义 REST 接口。 servicecomb 也
-支持使用这套标签定义 REST 接口。需要注意的是,servicecomb 只是使用这些注解,而注解的实现是项目自行开发的,
-实现的功能集合是 Spring MVC 注解的子集。可以阅读文章后面的内容了解具体的标签集合和使用约束。
-
-[SpringMVC Sample][spring-mvc-sample] 提供了一些基础的代码示例,可以下载使用。
-
-[spring-mvc-sample]: https://github.com/apache/servicecomb-samples/tree/master/java-chassis-samples/springmvc-sample
+支持使用这套标签定义 REST 接口。需要注意的是,servicecomb 只是使用这些注解,而注解的实现是项目自行开发的, 实现的功能集合是 Spring MVC 注解的子集。
## 开发步骤
@@ -14,139 +9,108 @@ Spring MVC 是 spring-web 项目定义的一套注解,开发者可以使用这
* 定义服务接口(可选)
- 定义接口是一个好习惯, 它不是必须的。
+定义接口是一个好习惯, 它不是必须的。
- ```java
- public interface Hello {
- String sayHi(String name);
- String sayHello(Person person);
- }
- ```
+```java
+@RequestMapping(path = "/provider")
+public interface ProviderService {
+ @GetMapping("/sayHello")
+ String sayHello(@RequestParam("name") String name);
+}
+```
* 实现服务接口
- 在服务的实现类上打上注解 `@RestSchema`,指定 `schemaId`。 注意 `schemaId` 需要保证微服务范围内唯一。
-
- ```java
- @RestSchema(schemaId = "springmvcHello")
- @RequestMapping(path = "/springmvchello", produces = MediaType.APPLICATION_JSON)
- public class SpringmvcHelloImpl implements Hello {
- @Override
- @RequestMapping(path = "/sayhi", method = RequestMethod.POST)
- public String sayHi(@RequestParam(name = "name") String name) {
- return "Hello " + name;
- }
-
- @Override
- @RequestMapping(path = "/sayhello", method = RequestMethod.POST)
- public String sayHello(@RequestBody Person person) {
- return "Hello person " + person.getName();
- }
- }
- ```
-
-
-## ServiceComb支持的 Spring MVC 注解说明
-
-servicecomb 支持使用 Spring MVC 提供的注解 `org.springframework.web.bind.annotation` 来声
-明REST接口,但是两者是独立的实现,而且有不一样的设计目标。servicecomb 的目标是提供跨语言、支持多通信协议的
-框架,因此去掉了Spring MVC中一些对跨语言支持不是很好的特性,也不支持特定运行框架强相关的特性,比
-如直接访问Servlet协议定义的`HttpServletRequest`。servicecomb 没有实现`@Controller`相关功
-能, 只实现了`@RestController`,即通过MVC模式进行页面渲染等功能都是不支持的。
-
-下面是一些具体差异。
+在服务的实现类上打上注解 `@RestSchema`,指定 `schemaId`。 注意 `schemaId` 需要保证微服务范围内唯一。
+
+```java
+@RestSchema(schemaId = "ProviderController",
+ schemaInterface = ProviderService.class)
+public class ProviderController implements ProviderService {
+ @Override
+ public String sayHello(String name) {
+ return "Hello " + name;
+ }
+}
+```
+
+
+## Java Chassis 支持的 Spring MVC 注解说明
* 常用标签支持
- 下面是CSE对于Spring MVC常用标签的支持情况。
-
- ***表1-1 Spring MVC注解情况说明***
-
-| 标签名称 | 是否支持 | 说明 |
-|------------------|:----:|:------------------------------------------------------------|
-| RequestMapping | 是 | 不允许制定多个Path,一个接口只允许一个Path,必须显示的声明 method 属性,只能定义唯一一个 method |
-| GetMapping | 是 | |
-| PutMapping | 是 | |
-| PostMapping | 是 | |
-| DeleteMapping | 是 | |
-| PatchMapping | 是 | |
-| RequestParam | 是 | 注意含义与Spring MVC不同。Java Chassis 表示 query 参数。 |
-| CookieValue | 是 | |
-| PathVariable | 是 | |
-| RequestHeader | 是 | |
-| RequestBody | 是 | 目前支持application/json,plain/text |
-| RequestPart | 是 | 用于文件上传的场景,对应的标签还有Part、MultipartFile |
-| ResponseBody | 否 | 返回值缺省都是在body返回 |
-| ResponseStatus | 否 | 可以通过ApiResponse指定返回的错误码 |
-| RequestAttribute | 是 | 注意含义与Spring MVC不同。Java Chassis 表示 form 参数。 |
-| SessionAttribute | 否 | Servlet协议相关的标签 |
-| MatrixVariable | 否 | |
-| ModelAttribute | 否 | |
-| ControllerAdvice | 否 | |
-| CrossOrigin | 否 | |
-| ExceptionHandler | 否 | |
-| InitBinder | 否 | |
+下面是CSE对于Spring MVC常用标签的支持情况。
+
+***表1-1 Spring MVC注解情况说明***
+
+| 标签名称 | 是否支持 | 说明 |
+|:------------------|:-----|:------------------------------------------------------------|
+| RequestMapping | 是 | 不允许制定多个Path,一个接口只允许一个Path,必须显示的声明 method 属性,只能定义唯一一个 method |
+| GetMapping | 是 | |
+| PutMapping | 是 | |
+| PostMapping | 是 | |
+| DeleteMapping | 是 | |
+| PatchMapping | 是 | |
+| RequestParam | 是 | 注意含义与Spring MVC不同。Java Chassis 表示 query 参数。 |
+| CookieValue | 是 | |
+| PathVariable | 是 | |
+| RequestHeader | 是 | |
+| RequestBody | 是 | 目前支持application/json,plain/text |
+| RequestPart | 是 | 用于文件上传的场景,对应的标签还有Part、MultipartFile |
+| ResponseBody | 否 | 返回值缺省都是在body返回 |
+| ResponseStatus | 否 | 可以通过ApiResponse指定返回的错误码 |
+| RequestAttribute | 是 | 注意含义与Spring MVC不同。Java Chassis 表示 form 参数。 |
+| SessionAttribute | 否 | Servlet协议相关的标签 |
+| MatrixVariable | 否 | |
+| ModelAttribute | 否 | |
+| ControllerAdvice | 否 | |
+| CrossOrigin | 否 | |
+| ExceptionHandler | 否 | |
+| InitBinder | 否 | |
+
* 服务声明方式
- Spring MVC使用`@RestController`声明服务,而ServiceComb使用`@RestSchema`声明服务,并且需
+Spring MVC使用`@RestController`声明服务,而ServiceComb使用`@RestSchema`声明服务,并且需
要显式地使用`@RequestMapping`声明服务路径,以区分该服务是采用Spring MVC的标签还是使用JAX RS的标签。
- ```
- @RestSchema(schemaId = "springmvcHello")
- @RequestMapping(path = "/springmvchello", produces = MediaType.APPLICATION_JSON)
- public class SpringmvcHelloImpl implements Hello {
- ......
- }
- ```
+```java
+@RestSchema(schemaId = "springmvcHello")
+@RequestMapping(path = "/springmvchello", produces = MediaType.APPLICATION_JSON)
+public class SpringmvcHelloImpl implements Hello {
+ // implementations
+}
+```
- servicecomb 也支持 `@RestController` 声明,等价于 `@RestSchma(schemaId="服务的class名称")`,这个
- 功能可以简化用户将老的应用改造为 servicecomb 。 建议用户使用`@RestSchema`显式声明schemaId,在管理
- 接口基本的配置项的时候,更加直观。
+Java Chassis 也支持 `@RestController` 声明,等价于 `@RestSchma(schemaId="服务的class名称")`,这个功能可以简化用户将老的应用改造为Java Chassis。 建议用户使用`@RestSchema`显式声明schemaId,在管理接口基本的配置项的时候,更加直观。
- **注意**:如果不希望Java-Chassis扫描`@RestController`注解作为REST接口类处理,需要增加配置
- `servicecomb.provider.rest.scanRestController=false` 以关闭此功能。
+**注意**:如果不希望Java-Chassis扫描`@RestController`注解作为REST接口类处理,需要增加配置
+`servicecomb.provider.rest.scanRestController=false` 以关闭此功能。
* 数据类型支持
- Spring 技术实现的 Spring MVC,可以在服务定义中使用多种数据类型,只要这种数据类型能够被json序列化和
- 反序列化。比如:
-
- ```
- // 抽象类型
- public void postData(@RequestBody Object data)
- // 接口定义
- public void postData(@RequestBody IPerson interfaceData)
- // 没指定类型的泛型
- public void postData(@RequestBody Map rawData)
- ```
-
- Spring 技术早期都是基于 JSP/Servlet 协议标准的,还可以使用相关的 context 参数,比如:
-
- ```
- // 具体协议相关的类型
- public void postData(HttpServletRequest rquest, HttpServletResponse response)
- ```
-
- servicecomb 对于数据类型存在一定的限制,不允许使用接口、抽象类等数据类型定义参数,虽然 servicecomb
- 支持使用 Object 这个特殊的类型来处理类型无法确定的情况,但是建议尽可能少使用,使用 Object 作为类型,
- 运行时的类型不确定,可能给客户端代码的书写带来一定麻烦。
-
- servicecomb 也支持一些 context 参数, 参考[使用 Context 参数](context-param.md) 。但是由于 servicecomb 默认的运行环境并不是 JSP/Servlet 协议
- 环境,因此不能直接使用 `HttpServletRequest` 和 `HttpServletResponse`。
+采用Spring Web MVC,可以在服务定义中使用多种数据类型,只要这种数据类型能够被Json序列化和反序列化。比如:
- ServiceComb在数据类型的支持方面的更多说明,请参考: [接口定义和数据类型](interface-constraints.md)
+```
+// 抽象类型
+public void postData(@RequestBody Object data)
+// 接口定义
+public void postData(@RequestBody IPerson interfaceData)
+// 没指定类型的泛型
+public void postData(@RequestBody Map rawData)
+// 具体协议相关的类型
+public void postData(HttpServletRequest rquest)
+```
-* 其他
+这些使用方式,无法确定接口的详细 RestFul 语义和输入输出格式,Java Chassis强调一个核心的原则:接口的输入输出在接口定义的时候就已经确定好,并且可以通过生成的 Open API 来显示的表达。因此不建议在接口声明的时候,采用接口、泛型、抽象类型等。
- 更多开发过程中碰到的问题,可以参考[案例](https://bbs.huaweicloud.com/blogs/8b8d8584e70d11e8bd5a7ca23e93a891)。开发过程中存在疑问,也可以在这里进行提问。
+Java Chassis 也支持一些 context 参数, 参考[使用 Context 参数](context-param.md) 。但是由于 servicecomb 默认的运行环境并不是 JSP/Servlet 协议 环境,因此不能直接使用 `HttpServletRequest` 和 `HttpServletResponse`。
+Java Chassis 在数据类型的支持方面的更多说明,请参考: [接口定义和数据类型](interface-constraints.md)
## 在响应中包含 HTTP header
-可以有多种方式在响应中包含 HTTP header, 下面代码展示了使用 ResponseEntity 包含 HTTP header。 需要注意
-使用 @ResponseHeaders 声明返回的 header 信息。 包含了 @ResponseHeaders 以后, 接口生成的契约中,也可以
-看到对应的 header 参数。
+可以有多种方式在响应中包含 HTTP header, 下面代码展示了使用 ResponseEntity 包含 HTTP header。 需要注意使用 @ResponseHeaders 声明返回的 header 信息。 包含了 @ResponseHeaders 以后, 接口生成的契约中,也可以看到对应的 header 参数。
```java
@ResponseHeaders({@ResponseHeader(name = "h1", response = String.class),
diff --git a/java-chassis-reference/zh_CN/docs/build-provider/swagger-annotation.md b/java-chassis-reference/zh_CN/docs/build-provider/swagger-annotation.md
index e8b9165..c750fd6 100644
--- a/java-chassis-reference/zh_CN/docs/build-provider/swagger-annotation.md
+++ b/java-chassis-reference/zh_CN/docs/build-provider/swagger-annotation.md
@@ -1,109 +1,27 @@
# 使用 Swagger 注解
-采用 Spring MVC 或者 JAX RS 注解已经能够描述大部分常用的契约信息,但是仍然不足以描述所有契约信息。可以混合
-使用 Swagger 注解,进一步补充契约信息,使得契约信息更加完整。当 Spring MVC 或者 JAR RS 注解描述的信息与
-Swagger 注解描述的信息重复时,以 Swagger 注解描述的信息为准,即 Swagger 注解具有更高的优先级。
+采用 Spring MVC 或者 JAX RS 注解已经能够描述RestFul/RPC运行时需要的契约信息,但是仍然不足以描述所有契约信息,比如描述、扩展等。可以混合使用 Swagger 注解,进一步补充契约信息,使得契约信息更加完整。当 Spring MVC 或者 JAR RS 注解描述的信息与 Swagger 注解描述的信息重复时,以 Swagger 注解描述的信息为准,即 Swagger 注解具有更高的优先级。
-关于Swagger注解的含义,可以在[Swagger注解文档](swagger-annotation)中找到官方说明。可以对
-照该官方文档与本说明来了解如何在ServiceComb框架下使用注解指定Swagger契约的各项属性。
+关于Swagger注解的含义,可以在 [Swagger注解文档](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations) 中找到官方说明。
-[swagger-annotation]: https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X
+## 例子
-## `@Api`
+* @OpenAPIDefinition
-> `@Api`作用于类级别,在Swagger官方描述中是用于将一个Class标注为一个Swagger资源。但该注解
-> 在ServiceComb中不是必须的,ServiceComb可以根据`@RestSchema`和`@RpcSchema`确定需要从哪些
-> 类中解析出Swagger契约。
+```java
+@OpenAPIDefinition(servers = {@Server(url = "/SameService1")})
+public interface SameService1 {
+ @GetMapping(path = "/sayHello")
+ String sayHello(@RequestParam("name") String name);
+}
+```
-| 属性 | 类型 | 说明 |
-| :--- | :------ | :--- |
-| tags | string | 设置当前Class下定义的operation的默认tag值 |
-| consumes | string | 指定契约级别的请求体数据格式,可以使用逗号分隔指定多个 |
-| produces | string | 指定契约级别的响应体数据格式,可以使用逗号分隔指定多个 |
+* @Operation
-## `@SwaggerDefinition`
-
-> 作用于类级别,用于定义一个Swagger资源中的信息。
-
-| 属性 | 类型 | 说明 |
-| :--- | :------ | :--- |
-| info.title | string | 契约文件标题 |
-| info.description | string | 描述信息 |
-| info.version | string | 契约版本号 |
-| info.termsOfService | string | 服务条款 |
-| info.contact | string | 联系信息,包含name、email、url属性 |
-| info.license | string | 许可证信息,包含name、url属性 |
-| info.extensions | string | 扩展信息 |
-| consumes | string | 接收的请求格式 |
-| produces | string | 返回的应答格式 |
-| schemes | SwaggerDefinition.Scheme | 可选值有`HTTP/HTTPS/WS/WSS/DEFAULT` |
-| tags | `@Tag` | Tag定义,@Tag包含name、description、externalDocs三个属性 |
-| externalDocs | `@externalDocs` | 外部说明文档链接,包含value、url两个属性 |
-
-## `@ApiOperation`
-
-> 作用于方法级别,用于描述一个Swagger operation。
-
-| 属性 | 类型 | 说明 |
-| :--- | :------ | :--- |
-| value | string | 方法的简要说明,对应于Swagger契约operation的`summary`字段 |
-| notes | string | 详细信息,对应于Swagger契约operation的`description`字段 |
-| tags | string | 标注operation的标签 |
-| code | int | 响应消息的HTTP状态码 |
-| response | Class<?> | 方法返回值类型 |
-| responseContainer | string | 包装返回值的容器类型,可选值为`List`、`Set`、`Map` |
-| responseHeaders | `@ResponseHeader` | 响应消息的HTTP头,ServiceComb支持的属性值为`name`、`response`、`responseContainer` |
-| consumes | string | 指定请求体的数据格式 |
-| produces | string | 指定响应体的数据格式 |
-| protocols | string | 设置可用的协议(schemes),可选值有`http`、`https`、`ws`、`wss`,逗号分隔 |
-| httpMethod | string | 设置HTTP方法 |
-| hidden | boolean | 是否隐藏此方法 |
-
-## `@ApiImplicitParam`
-
-> 作用于方法级别,用于说明Swagger文档中operation的参数的属性。
->
-> **注意**:ServiceComb可以根据代码和SpringMVC、JAX-RS的注解自动推断出参数名称。如果`@ApiImplicitParam`配置的参数名称与自动推断的参数名不同,则则该注解配置的参数将被作为一个新的参数加入到注解所在的operation中;否则将覆盖同名参数的属性。
-
-| 属性 | 类型 | 说明 |
-| :--- | :------ | :--- |
-| name | string | 参数名称 |
-| value | string | 参数说明 |
-| required | boolean | 是否是必填参数 |
-| dataType | string | 参数数据类型 |
-| paramType | string | 参数位置,有效的可选值为path/query/body/header/form |
-| allowableValues | string | 参数的有效值范围 |
-| allowEmptyValue | boolean | 是否允许空值 |
-| allowMultiple | boolean | 是否允许多个值(若为true,则可以将参数作为数组) |
-| collectionFormat | string | 以何种格式指定参数数组,当前ServiceComb支持的值为`csv/multi` |
-| defaultValue | string | 参数默认值 |
-| example | string | 一个非body参数的示例值 |
-| format | string | 允许用户自定义数据格式,详情参见Swagger官方文档 |
-
-## `@ApiImplicitParams`
-
-> `@ApiImplicitParams`作用于方法、类级别,用于批量指定多个`@ApiImplicitParam`。
-
-| 属性 | 类型 | 说明 |
-| :--- | :------ | :--- |
-| value | `@ApiImplicitParam` | 参数定义 |
-
-## `@ApiResponse`
-
-> 用于描述返回消息的HTTP状态码所表达的含义。通常`@ApiOperation`可以表示一个正常情况返回消息的HTTP状态码,其他情形下的HTTP状态码由本注解描述。根据Swagger官方文档的描述,本注解不应该直接用于方法级别,而应该被包含在`@ApiResponses`中。
-
-| 属性 | 类型 | 说明 |
-| :--- | :------ | :--- |
-| code | int | 返回消息的HTTP状态码 |
-| message | string | 返回值的说明信息 |
-| response | Class<?> | 返回值的类型 |
-| responseContainer | string | 返回值的包装容器,可选值为`List/Set/Map` |
-| responseHeaders | @ResponseHeader | 描述一组返回消息的HTTP头,ServiceComb支持的`@ResponseHeader`的属性有`name`、`description`、`response`、`responseContainer` |
-
-## `@ApiResponses`
-
-> 作用于方法、类级别,用于指定和说明一组返回值。
-
-| 属性 | 类型 | 说明 |
-| :--- | :------ | :--- |
-| value | `@ApiResponse` | 返回消息说明 |
+```java
+@GetMapping(path = "/specialNameModel")
+@Operation(summary = "specialNameModel", operationId = "specialNameModel")
+public SpecialNameModel specialNameModel(@RequestParam("code") int code, @RequestBody SpecialNameModel model) {
+ return model;
+}
+```
diff --git a/java-chassis-reference/zh_CN/docs/spring-boot/diff-spring-mvc.md b/java-chassis-reference/zh_CN/docs/spring-boot/diff-spring-mvc.md
index 8003510..ee524e8 100644
--- a/java-chassis-reference/zh_CN/docs/spring-boot/diff-spring-mvc.md
+++ b/java-chassis-reference/zh_CN/docs/spring-boot/diff-spring-mvc.md
@@ -1,10 +1,14 @@
# 与Spring Web MVC开发习惯的差异
-Java Chassis支持使用Spring MVC提供的标签\(org.springframework.web.bind.annotation\)来声明REST接口,但是两者是独立的实现,并且有不一样的设计目标。Java Chassis的目标是提供跨语言、支持多通信协议的框架,因此去掉了Spring Web MVC中一些对跨语言支持不是很好的特性,也不支持特定运行框架强相关的特性,比如直接访问Servlet协议定义的HttpServletRequest。Java Chassis支持的Spring Web MVC标签是Spring Boot的子集, 下面是一些显著的差别。
+Java Chassis支持使用Spring MVC提供的标签 `org.springframework.web.bind.annotation` 来声明REST接口,但是两者是独立的实现,并且有不一样的设计目标。Java Chassis的目标是提供跨语言、支持多通信协议的RESTFul/RPC框架,可以运行于J2EE/JavaEE容器或者普通的HTTP服务器,不依赖于J2EE/JavaEE。而Spring MVC诞生比较早,很多功能都会依赖于J2EE/JavaEE。 Java Chassis整体的应用架构采用后端和前端分离的微服务架构,不会在单独的微服务实现中使用MVC模式。
+
+相对于Spring MVC, Java Chassis去掉了一些对跨语言支持不是很好的特性,也不支持特定运行框架强相关的特性,比如直接访问 `Servlet` 定义的HttpServletRequest、HttpServletResponse,或者使用HttpAttribute、HttpSession进行会话管理等,也不支持MVC模式一些相关的内容,比如ModelAndView等。
+
+Java Chassis支持的Spring Web MVC标签是Spring Boot的子集, 下面是一些显著的差别。
* 服务声明方式
-Spring MVC使用@RestController声明服务,而Java Chassis使用@RestSchema声明服务,并且需要显示的使用@RequestMapping声明服务路径,以区分该服务是采用Spring Web MVC的标签还是使用JAX RS的标签。
+Spring MVC使用 `@RestController` 声明服务,而Java Chassis使用 `@RestSchema` 声明服务,并且需要显示的使用 `@RequestMapping` 声明服务路径,以区分该服务是采用Spring Web MVC的标签还是使用JAX RS的标签。
```
@RestSchema(schemaId = "hello")
@@ -28,7 +32,7 @@ public void postData(@RequestBody Map rawData)
public void postData(HttpServletRequest rquest)
```
-Java Chassis不支持上诉类型。因为Java Chassis会根据接口定义生成契约,从上面的接口定义,如果不结合实际的实现代码或者额外的开发文档说明,无法直接生成契约。
+这些使用方式,无法确定接口的详细 RestFul 语义和输入输出格式,Java Chassis强调一个核心的原则:接口的输入输出在接口定义的时候就已经确定好,并且可以通过生成的 Open API 来显示的表达。因此不建议在接口声明的时候,采用接口、泛型、抽象类型等。
>>> 说明: 为了支持快速开发,Java Chassis的数据类型限制也在不停的扩充,比如支持HttpServletRequest,但是实际在使用的时候,他们与WEB服务器的语义是不一样的,比如不能直接操作流。因此建议开发者在的使用场景下,尽可能使用契约能够描述的类型,让代码阅读性更好。此外,Spring针对DispatcherServlet做了大量的扩展,这些扩展对于Java Chassis是不适用的。
diff --git a/java-chassis-reference/zh_CN/mkdocs.yml b/java-chassis-reference/zh_CN/mkdocs.yml
index 0d2b152..6483eb8 100644
--- a/java-chassis-reference/zh_CN/mkdocs.yml
+++ b/java-chassis-reference/zh_CN/mkdocs.yml
@@ -21,11 +21,11 @@ nav:
- 用JAX-RS开发微服务: build-provider/jaxrs.md
- 用SpringMVC开发微服务: build-provider/springmvc.md
- 用透明RPC开发微服务: build-provider/transparent-rpc.md
+ - 使用Swagger注解: build-provider/swagger-annotation.md
- 只发布interface的方法为服务接口: build-provider/use-interface.md
- 异步处理: build-provider/reactive.md
- 使用 Context 参数: build-provider/context-param.md
- 多个返回值和错误码: build-provider/multi-code.md
- - 使用Swagger注解: build-provider/swagger-annotation.md
- 接口定义和数据类型: build-provider/interface-constraints.md
- 服务监听地址和发布地址: build-provider/listen-address-and-publish-address.md
- 线程池: build-provider/thread-pool.md