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 40659ce  add http mapping reference (#321)
40659ce is described below

commit 40659ced234d505e4e1f80a5633734627a9d1e81
Author: liubao68 <[email protected]>
AuthorDate: Tue Jan 30 15:07:08 2024 +0800

    add http mapping reference (#321)
---
 .../zh_CN/docs/build-provider/http-mapping.md      | 451 +++++++++++++++++++++
 .../zh_CN/docs/build-provider/springmvc.md         |  78 ++--
 .../zh_CN/docs/config/read-config.md               |  50 +--
 .../featured-topics/secrets/interoperability.md    |   4 +-
 java-chassis-reference/zh_CN/mkdocs.yml            |   1 +
 5 files changed, 494 insertions(+), 90 deletions(-)

diff --git a/java-chassis-reference/zh_CN/docs/build-provider/http-mapping.md 
b/java-chassis-reference/zh_CN/docs/build-provider/http-mapping.md
new file mode 100644
index 0000000..9515f7f
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/build-provider/http-mapping.md
@@ -0,0 +1,451 @@
+# HTTP参数映射参考
+
+HTTP协议是一个文本传输协议,RESTFul框架核心部分,就是将语言对象与HTTP协议的组成部件映射起来,提供远程过程调用(RPC)能力。 
HTTP的请求响应可以简化描述为:
+
+* 请求
+
+```text
+GET /apps HTTP/1.1
+
+Host: 127.0.0.1:8080
+Accept-Language: zh
+Content-Type: application/x-www-form-urlencoded
+
+queryParamExample1=example1&queryParamExample2=example2
+```
+
+* 响应
+
+```text
+Host: 127.0.0.1:8080
+Content-Type: application/x-www-form-urlencoded
+
+queryParamExample1=example1&queryParamExample2=example2
+```
+
+## HTTP请求参数映射
+
+### Query
+
+Query参数属于HTTP协议URL的一部分,比如:
+
+```text
+GET /apps?queryParamExample1=example1&queryParamExample2=example2 HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+```
+
+定义了Query参数 `queryParamExample1` 和 `queryParamExample2`。
+
+* Spring MVC
+
+```java
+@GetMapping("")
+public String queryExample(@RequestParam("queryParamExample1") String example1,
+    @RequestParam("queryParamExample2") String example2)
+```
+
+* JAX-RS
+
+```java
+@GET
+@Path("")
+public String queryJAXRSExample(@QueryParam("queryParamExample1") String 
example1,
+    @QueryParam("queryParamExample2") String example2)
+```
+
+### Path
+
+Path参数属于HTTP协议URL的一部分,比如:
+
+```text
+GET /apps/pathParamExample1/pathParamExample2 HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+```
+
+定义了Path参数 `pathParamExample1` 和 `pathParamExample2`。
+
+* Spring MVC
+
+```java
+@GetMapping("/{pathParamExample1}/{pathParamExample2}")
+public String pathSpringMVCExample(@PathVariable("pathParamExample1") String 
example1,
+    @PathVariable("pathParamExample2") String example2)
+```
+
+* JAX-RS
+
+```java
+@GET
+@Path("/{pathParamExample1}/{pathParamExample2}")
+public String pathJAXRSExample(@PathParam("pathParamExample1") String example1,
+    @PathParam("pathParamExample2") String example2) 
+```
+
+### Header
+
+Header对应于HTTP协议请求头,比如:
+
+```text
+GET /apps HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+headerParamExample1: example1
+headerParamExample2: example2
+```
+
+定义了Header参数 `headerParamExample1` 和 `headerParamExample2`。
+
+* Spring MVC
+
+```java
+@GetMapping("")
+public String headerSpringMVCExample(@RequestHeader("headerParamExample1") 
String example1,
+    @RequestHeader("headerParamExample2") String example2)
+```
+
+* JAX-RS
+
+```java
+@GET
+@Path("")
+public String headerJAXRSExample(@HeaderParam("headerParamExample1") String 
example1,
+    @HeaderParam("headerParamExample2") String example2)
+```
+
+### application/x-www-form-urlencoded
+
+当 HTTP 消息体是 `application/x-www-form-urlencoded`, 可以使用 Form 参数。 
+
+```text
+GET /apps HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+Content-Type: application/x-www-form-urlencoded
+
+queryParamExample1=example1&queryParamExample2=example2
+```
+
+* Spring MVC
+
+```java
+@GetMapping(path = "formSpringMVCExample", consumes = 
MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+public String formSpringMVCExample(@RequestAttribute("formParamExample1") 
String example1,
+    @RequestAttribute("formParamExample2") String example2)
+```
+
+>>> 原生 Spring MVC 的 RequestAttribute 表示 HTTP 的 Attribute, 使用 RequestParam 表示 
form 参数,这会导致代码生成契约的时候产生歧义。 Java Chassis 3 推荐使用 RequestAttribute 表示Form参数。
+
+* JAX-RS
+
+```java
+@GET
+@Path("formJAXRSExample")
+@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+public String formJAXRSExample(@FormParam("formParamExample1") String example1,
+    @FormParam("formParamExample2") String example2)
+```
+
+### multipart/form-data
+
+当 HTTP 消息体是 `multipart/form-data`, 表示文件上传。
+
+```text
+GET /apps HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+Content-Type: multipart/form-data; boundary=----boundary-example----
+
+----boundary-example----
+Content-Disposition: form-data; name="multiPartParamExample1"
+
+contents of multiPartParamExample1
+----boundary-example----
+Content-Disposition: form-data; name="multiPartParamExample2"
+
+contents of multiPartParamExample2
+----boundary-example----
+```
+
+>>> multipart/form-data 也可以表示 Form 参数, 和 application/x-www-form-urlencoded 
用法一样。为了避免混淆和简洁,建议multipart/form-data用于文件上传场景。 
+
+```java
+@PostMapping(path = "multiPartSpringMVCExample", consumes = 
MediaType.MULTIPART_FORM_DATA_VALUE)
+public String multiPartSpringMVCExample(@RequestPart("multiPartParamExample1") 
MultipartFile example1,
+    @RequestPart("multiPartParamExample2") MultipartFile example2)
+```
+
+* JAX-RS
+
+```java
+@POST
+@Path("multiPartJAXRSExample")
+@Consumes(MediaType.MULTIPART_FORM_DATA)
+public String multiPartJAXRSExample(@FormParam("multiPartParamExample1") Part 
example1,
+    @FormParam("multiPartParamExample2") Part example2)
+```
+
+### application/json
+
+当 HTTP 消息体是 `application/json`, 使用json进行对象序列化。
+
+```text
+GET /apps HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+Content-Type: application/json
+
+{"name": "wang", "age": 20}
+```
+
+* Spring MVC
+
+```java
+@PostMapping(path = "jsonSpringMVCExample", consumes = 
MediaType.APPLICATION_JSON_VALUE)
+public String jsonSpringMVCExample(@RequestBody Person person) 
+```
+
+* JAX-RS
+
+```java
+@POST
+@Path("jsonJAXRSExample")
+@Consumes(jakarta.ws.rs.core.MediaType.APPLICATION_JSON)
+public String jsonJAXRSExample(Person person)
+```
+
+>>> JAX-RS没有声明标签的时候表示Body参数。 
+
+### application/protobuf
+
+当 HTTP 消息体是 `application/protobuf`, 使用protobuf进行对象序列化。
+
+```text
+GET /apps HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+Content-Type: application/protobuf
+
+proto-buffer-binary-data
+```
+
+* Spring MVC
+
+```java
+@PostMapping(path = "protobufSpringMVCExample", consumes = 
SwaggerConst.PROTOBUF_TYPE)
+public String protobufSpringMVCExample(@RequestBody Person person)
+```
+
+* JAX-RS
+
+```java
+@POST
+@Path("protobufJAXRSExample")
+@Consumes(SwaggerConst.PROTOBUF_TYPE)
+public String protobufJAXRSExample(Person person)
+```
+
+>>> JAX-RS没有声明标签的时候表示Body参数。
+
+### application/text
+
+当 HTTP 消息体是 `application/text`, 使用json进行对象序列化。
+
+>>> application/text 和 application/json 在对象序列化上都采用 json,对于大多数场景两者是等价的。只有当对象类型为 
String 的时候, 存在差异:application/text 的 String 序列化后的文本没有双引号;application/json 的 
String 序列化后的文本有双引号;
+
+```text
+GET /apps HTTP/1.1
+Host: 127.0.0.1:8080
+Accept-Language: zh
+Content-Type: application/text
+
+{"name": "wang", "age": 20}
+```
+
+* Spring MVC
+
+```java
+@PostMapping(path = "textSpringMVCExample", consumes = 
MediaType.TEXT_PLAIN_VALUE)
+public String textSpringMVCExample(@RequestBody Person person)
+```
+
+* JAX-RS
+
+```java
+@POST
+@Path("textJAXRSExample")
+@Consumes(MediaType.TEXT_PLAIN)
+public String textJAXRSExample(Person person) 
+```
+
+>>> JAX-RS没有声明标签的时候表示Body参数。
+
+## HTTP响应参数映射
+
+### 状态码 和 Header
+
+在没有特殊声明的情况下,正常响应的状态码是 `200`,也可以声明其他状态码。
+
+>>> Java Chassis 2xx 状态码表示正常响应,会进行对象序列化。 可以使用 `@ApiResponse` 自定义状态码,所有 2xx 
状态码声明的对象类型必须一样。 其他状态码表示异常,会对 `InvocationException` 进行序列化,不要求对象类型一样。 
+
+* Spring MVC
+
+```java
+@PostMapping(path = "statusHeaderSpringMVCExample")
+@ApiResponses(value = {
+    @ApiResponse(
+        responseCode = "200",
+        content = @Content(schema = @Schema(implementation = Person.class)),
+        headers = {
+            @Header(name = "h1", schema = @Schema(implementation = 
String.class)),
+            @Header(name = "h2", schema = @Schema(implementation = 
String.class))}),
+    @ApiResponse(
+        responseCode = "202",
+        content = @Content(schema = @Schema(implementation = Person.class)),
+        headers = {
+            @Header(name = "h1", schema = @Schema(implementation = 
String.class)),
+            @Header(name = "h2", schema = @Schema(implementation = 
String.class))}),
+    @ApiResponse(
+        responseCode = "400",
+        content = @Content(schema = @Schema(implementation = 
MultiResponse400.class)),
+        headers = {
+            @Header(name = "h1", schema = @Schema(implementation = 
String.class)),
+            @Header(name = "h2", schema = @Schema(implementation = 
String.class))})})
+public ResponseEntity<Person> statusHeaderSpringMVCExample(@RequestBody Person 
person) {
+    return ResponseEntity.status(200).header("h1", "h1")
+    .header("h2", "h2").body(person);
+}
+```
+
+* JAX-RS
+
+```java
+@PostMapping(path = "statusHeaderJAXRSExample")
+@ApiResponses(value = {
+    @ApiResponse(
+        responseCode = "200",
+        content = @Content(schema = @Schema(implementation = Person.class)),
+        headers = {
+            @Header(name = "h1", schema = @Schema(implementation = 
String.class)),
+            @Header(name = "h2", schema = @Schema(implementation = 
String.class))}),
+    @ApiResponse(
+        responseCode = "202",
+        content = @Content(schema = @Schema(implementation = Person.class)),
+        headers = {
+            @Header(name = "h1", schema = @Schema(implementation = 
String.class)),
+            @Header(name = "h2", schema = @Schema(implementation = 
String.class))}),
+    @ApiResponse(
+        responseCode = "400",
+        content = @Content(schema = @Schema(implementation = 
MultiResponse400.class)),
+        headers = {
+            @Header(name = "h1", schema = @Schema(implementation = 
String.class)),
+            @Header(name = "h2", schema = @Schema(implementation = 
String.class))})})
+public Response statusHeaderJAXRSExample(@RequestBody Person person) {
+    return Response.status(200).entity(new Person()).header("h1", "h1")
+    .header("h2", "h2").build();
+}
+```
+
+### application/json
+
+响应类型根据 `Accept` 来确定,默认是 application/json。 也可以声明接口只支持 application/json 响应。 
+
+```java
+@PostMapping(path = "produceJsonSpringMVCExample", produces = 
MediaType.APPLICATION_JSON_VALUE)
+public Person produceJsonSpringMVCExample()
+```
+
+* JAX-RS
+
+```java
+@POST
+@Path("produceJsonJAXRSExample")
+@Produces(MediaType.APPLICATION_JSON)
+public Person produceJsonJAXRSExample() 
+```
+
+### application/protobuf
+
+响应类型根据 `Accept` 来确定,默认是 application/json。 也可以声明接口只支持 application/protobuf 响应。
+
+```java
+@PostMapping(path = "produceProtobufSpringMVCExample", produces = 
SwaggerConst.PROTOBUF_TYPE)
+public Person produceProtobufSpringMVCExample()
+```
+
+* JAX-RS
+
+```java
+@POST
+@Path("produceProtobufJAXRSExample")
+@Produces(SwaggerConst.PROTOBUF_TYPE)
+public Person produceProtobufJAXRSExample() 
+```
+
+### application/text
+
+响应类型根据 `Accept` 来确定,默认是 application/json。 也可以声明接口只支持 application/text 响应。
+
+```java
+@PostMapping(path = "produceTextSpringMVCExample", produces = 
MediaType.TEXT_PLAIN_VALUE)
+public Person produceTextSpringMVCExample()
+```
+
+* JAX-RS
+
+```java
+@POST
+@Path("produceTextJAXRSExample")
+@Produces(MediaType.TEXT_PLAIN)
+public Person produceTextJAXRSExample() 
+```
+
+### 其他
+
+Java Chassis提供了通用的 `文件下载` 支持。 如果返回值类型为 `File`、`Resource`、`InputStream`、`Part` 
等,则被认为是 `文件下载`。 
+
+* Spring MVC
+
+```java
+@GetMapping(path = "/downloadSpringMVCExample")
+public Part downloadSpringMVCExample(String content) throws IOException {
+    File file = createTempFile(content);
+    return new FilePart(null, file)
+        .setDeleteAfterFinished(true)
+        .setSubmittedFileName("test.txt")
+        .contentType("application/octet-stream");
+}
+```
+
+上述接口会返回如下响应头:
+
+```text
+Content-Disposition: attachment;filename=file.txt;filename*=utf-8’’file.txt
+Content-Encoding: gzip
+Content-Type: application/octet-stream
+Transfer-Encoding: chunked
+```
+
+* JAX-RS
+
+```java
+@GET
+@Path("/downloadSpringMVCExample")
+public Part downloadSpringMVCExample(String content) throws IOException {
+    File file = createTempFile(content);
+    return new FilePart(null, file)
+        .setDeleteAfterFinished(true)
+        .setSubmittedFileName("test.txt")
+        .contentType("application/octet-stream");
+}
+```
+
+上述接口会返回如下响应头:
+
+```text
+Content-Disposition: attachment;filename=file.txt;filename*=utf-8’’file.txt
+Content-Encoding: gzip
+Content-Type: application/octet-stream
+Transfer-Encoding: chunked
+```
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 0416194..2534fd0 100644
--- a/java-chassis-reference/zh_CN/docs/build-provider/springmvc.md
+++ b/java-chassis-reference/zh_CN/docs/build-provider/springmvc.md
@@ -45,36 +45,6 @@ Spring MVC 是 spring-web 项目定义的一套注解,开发者可以使用这
         }
         ```
 
-* 发布服务 (可选,默认会扫描 main 函数所在的 package )
-
-  在`resources/META-INF/spring`目录下创建`springmvcprovider.bean.xml`文件,
-  命名规则为`\*.bean.xml`,配置spring进行服务扫描的base-package,文件内容如下:
-
-        ```xml
-        <?xml version="1.0" encoding="UTF-8"?>
-        
-        <beans xmlns="http://www.springframework.org/schema/beans";
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-          xmlns:cse="http://www.huawei.com/schema/paas/cse/rpc";
-          xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
-                http://www.huawei.com/schema/paas/cse/rpc 
classpath:META-INF/spring/spring-paas-cse-rpc.xsd">
-        
-            <context:component-scan 
base-package="org.apache.servicecomb.samples.springmvc.povider"/>
-        </beans>
-        ```
-
-* 启动 provider 服务
-
-  servicecomb 依赖于 Spring, 只需要将 Spring 框架启动起来即可。
-
-        ```java
-        public class SpringmvcProviderMain {
-        
-          public static void main(String[] args) throws Exception {
-            BeanUtils.init();
-          }
-        }
-        ```
 
 ## ServiceComb支持的 Spring MVC 注解说明
 
@@ -92,30 +62,30 @@ servicecomb 支持使用 Spring MVC 提供的注解 
`org.springframework.web.bin
 
   ***表1-1 Spring MVC注解情况说明***
 
-| 标签名称 | 是否支持 | 说明 |
-| :--- | :--- | :--- |
-| RequestMapping | 是 | 不允许制定多个Path,一个接口只允许一个Path,必须显示的声明 method 属性,只能定义唯一一个 
method |
-| GetMapping | 是 |  |
-| PutMapping | 是 |  |
-| PostMapping | 是 |  |
-| DeleteMapping | 是 |  |
-| PatchMapping | 是 |  |
-| RequestParam | 是 |  |
-| CookieValue | 是 |  |
-| PathVariable | 是 |  |
-| RequestHeader | 是 |  |
-| RequestBody | 是 | 目前支持application/json,plain/text |
-| RequestPart | 是 | 用于文件上传的场景,对应的标签还有Part、MultipartFile |
-| ResponseBody | 否 | 返回值缺省都是在body返回 |
-| ResponseStatus | 否 | 可以通过ApiResponse指定返回的错误码 |
-| RequestAttribute | 否 | Servlet协议相关的标签 |
-| SessionAttribute | 否 | Servlet协议相关的标签 |
-| MatrixVariable | 否 |  |
-| ModelAttribute | 否 |  |
-| ControllerAdvice | 否 |  |
-| CrossOrigin | 否 |  |
-| ExceptionHandler | 否 |  |
-| InitBinder | 否 |  |
+| 标签名称             | 是否支持 | 说明                                                 
         |
+|------------------|:----:|:------------------------------------------------------------|
+| 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       |  否   |                                                    
         |
 
 * 服务声明方式
 
diff --git a/java-chassis-reference/zh_CN/docs/config/read-config.md 
b/java-chassis-reference/zh_CN/docs/config/read-config.md
index cad0781..a144cfc 100644
--- a/java-chassis-reference/zh_CN/docs/config/read-config.md
+++ b/java-chassis-reference/zh_CN/docs/config/read-config.md
@@ -40,9 +40,10 @@ Bean 属性对应的配置项名称支持通配符, 一个属性可以关联
 
 * 配置注入对象
 
-  我们首先设计两个Java类用于注入配置属性,分别用来演示不使用注解和使用注解的场景。使用注解:
+  我们首先设计两个Java类用于注入配置属性,分别用来演示不使用注解和使用注解的场景。使用@InjectProperties注解并声明为Bean:
 
       ```Java
+      @Component
       @InjectProperties(prefix = "jaxrstest.jaxrsclient")
       public class Configuration {
         /*
@@ -116,33 +117,6 @@ Bean 属性对应的配置项名称支持通配符, 一个属性可以关联
       }
       ```
 
-  不使用注解:
-
-        ```Java
-        public class ConfigNoAnnotation {
-            /*
-             * 如果未提供@InjectProperties和@InjectProperty注解,会默认使用字段名作为配置属性名。
-             * 注意类名不作为前缀起作用。
-             * 此处将配置属性 strValue 绑定到该字段
-            */
-          public String strValue;
-        }
-        ```
-
-* 执行注入
-
-  使用注解的场景:
-
-        ```Java
-        ConfigWithAnnotation config = 
SCBEngine.getInstance().getPriorityPropertyManager()
-          .createConfigObject(Configuration.class,
-                "key", "k",
-                "low-list", Arrays.asList("low-1", "low-2"),
-                "high-list", Arrays.asList("high-1", "high-2"),
-                "full-list", Arrays.asList("l1-1", "l1-2")
-                );
-        ```
-
   Configuration对象的longValue字段按以下顺序查找已配置的属性:
 
         1.  root.low-1.a.high-1.b
@@ -151,17 +125,25 @@ Bean 属性对应的配置项名称支持通配符, 一个属性可以关联
         4.  root.low-2.a.high-2.b
 
   Configuration对象的floatValue字段按以下顺序查找已配置的属性:
-  
+
         1.  root.l1-1
         2.  root.l1-2
-    
-  不使用注解的场景:
+
+  不使用注解:
 
         ```Java
-        ConfigNoAnnotation config = SCBEngine.getInstance()
-          
.getPriorityPropertyManager().createConfigObject(ConfigNoAnnotation.class);
+        @Component
+        @InjectProperties(prefix = "jaxrstest.jaxrsclient")
+        public class ConfigNoAnnotation {
+            /*
+             * 如果未提供@InjectProperties和@InjectProperty注解,会默认使用字段名作为配置属性名。
+             * 注意类名不作为前缀起作用。
+             * 此处将配置属性 strValue 绑定到该字段
+            */
+          public String strValue;
+        }
         ```
-        
+
   ConfigNoAnnotation 对象的 strValue 字段会查找已配置的属性 strValue,没有前缀和优先级。
 
   更多关于配置注入的用法,建议下载 java-chassis 的源码, 查看 TestConfigObjectFactory 类里面的示例。
diff --git 
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability.md 
b/java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability.md
index 8eb07c7..c0dc6f4 100644
--- 
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability.md
+++ 
b/java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability.md
@@ -15,10 +15,10 @@ Java Chassis 3一个很重要的设计原则:利用架构的韧性设计来解
 
 从技术原理上梳理下上述互操作需要满足的条件:
 
-* Spring Cloud和Java Chassis需要有相互认识的注册信息。核心包括:应用名称、服务名称、地址信息和格式等。 
需要的共同注册中心越少,越容易对注册中心和客户端进行选型。 在本例子中,我们选择 service center作为注册中心,并选择Spring Cloud 
Huawei实现Spring Cloud往service center注册。 
+* Spring Cloud和Java Chassis需要有相互认识的注册信息。核心包括:应用名称、服务名称、地址信息和格式等。 
需要的共同注册中心越少,越容易对注册中心和客户端进行选型。 在本例子中,我们选择 `Service Center` 或者 `Nacos` 
作为注册中心,并选择Spring Cloud Huawei实现Spring Cloud注册。 
 * Spring Cloud访问Java Chassis,只需要一个地址信息,依赖较少。 Java Chassis访问Spring 
Cloud,需要知道Spring Cloud应用提供的契约信息。 
 
-Java Chassis区别于Spring Cloud的REST调用的部分,就是契约依赖。 Spring 
Cloud通过FeignClient来声明客户端契约,客户端都需要在FeignClient中重复书写REST标签;Java 
Chassis有两种模式发现契约:从注册中心发现和从Provider实例发现。 Java Chassis3默认采用从Provider实例发现, Java 
Chassis2采用从注册中心发现。 从Provider发现的好处是可以降低对于注册中心元数据管理能力的要求,虽然本例子中采用 service 
center作为注册中心,选择Nacos等作为注册中心也是可以的。 
+Java Chassis区别于Spring Cloud的REST调用的部分,就是契约依赖。 Spring 
Cloud通过FeignClient来声明客户端契约,客户端都需要在FeignClient中重复书写REST标签;Java 
Chassis有两种模式发现契约:从注册中心发现和从Provider实例发现。 Java Chassis3默认采用从Provider实例发现, Java 
Chassis2采用从注册中心发现。 从Provider发现的好处是可以降低对于注册中心元数据管理能力的要求,本例既可以采用 `Service Center` 
作为注册中心,也可以选择 `Nacos` 作为注册中心。 
 
 从Provider发现,要求Provider实现如下接口:
 
diff --git a/java-chassis-reference/zh_CN/mkdocs.yml 
b/java-chassis-reference/zh_CN/mkdocs.yml
index 350d38a..14d73bd 100644
--- a/java-chassis-reference/zh_CN/mkdocs.yml
+++ b/java-chassis-reference/zh_CN/mkdocs.yml
@@ -20,6 +20,7 @@ nav:
     - 用JAX-RS开发微服务: build-provider/jaxrs.md
     - 用SpringMVC开发微服务: build-provider/springmvc.md
     - 用透明RPC开发微服务: build-provider/transparent-rpc.md
+    - HTTP参数映射参考: build-provider/http-mapping.md
     - 只发布interface的方法为服务接口: build-provider/use-interface.md
     - 异步处理: build-provider/reactive.md
     - 使用 Context 参数: build-provider/context-param.md

Reply via email to