add descriptions about Spring MVC supported annotations and differences.
diff --git a/java-chassis-reference/en_US/build-provider/springmvc.md b/java-chassis-reference/en_US/build-provider/springmvc.md
index 91e270c..4a2b06f 100644
--- a/java-chassis-reference/en_US/build-provider/springmvc.md
+++ b/java-chassis-reference/en_US/build-provider/springmvc.md
@@ -1,131 +1,227 @@
 # Develop Microservice with SpringMVC  
 ## Concept Description
 
-ServiceComb supports Spring MVC remark and allows you to develop microservices in Spring MVC mode.
+ServiceComb supports Spring MVC annotations to define your REST services. The [samples project](https://github.com/apache/servicecomb-java-chassis/tree/master/samples/springmvc-sample) has a lot of working examples.
 
 ## Development Example
 
-* **Step 1** Import dependencies into your maven project:
+### Define the service interface (optional)
 
-   ```xml
-    <dependencyManagement>
-     <dependencies>
-       <dependency>
-         <groupId>org.apache.servicecomb</groupId>
-         <artifactId>java-chassis-dependencies</artifactId>
-         <version>1.0.0-m1</version>
-         <type>pom</type>
-         <scope>import</scope>
-       </dependency>
-     </dependencies>
-    </dependencyManagement>
-    <dependencies>
-      <!--transport can optional import through endpoint setting in microservice.yaml, we import both rest and highway as example-->
-      <dependency>
-        <groupId>org.apache.servicecomb</groupId>
-        <artifactId>transport-rest-vertx</artifactId>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb</groupId>
-        <artifactId>transport-highway</artifactId>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb</groupId>
-        <artifactId>provider-springmvc</artifactId>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-log4j12</artifactId>
-      </dependency>
-    </dependencies>
-   ```
+Writing a interface for the REST service make it easy to call the service in client in RPC style.
+
+```java
+public interface Hello {
+    String sayHi(String name);
+    String sayHello(Person person);
+}
+```
 
 * **Step 2** Implement the services. Spring MVC is used to describe the development of service code. The implementation of the Hello service is as follow:
 
-   ```java
-   import javax.ws.rs.core.MediaType;
-   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.RequestParam;
-   import org.apache.servicecomb.samples.common.schema.models.Person;
+ ```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;
+    }
 
-   @RequestMapping(path = "/springmvchello", produces = MediaType.APPLICATION_JSON)
-   public class SpringmvcHelloImpl {
-     @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();
+    }
+}
+```
 
-     @RequestMapping(path = "/sayhello", method = RequestMethod.POST)
-     public String sayHello(@RequestBody Person person) {
-      return "Hello person " + person.getName();
-    }
-   }
-   ```
-   
-   **Note: PLEASE MAKE SURE TO MARK @RequestMapping ON YOUR PRODUCER(SpringmvcHelloImpl), OR THE PATH AND METHOD OF PUBLISHED WILL BE INCORRECT!**
-   
-   In this sample the Path of sayHi is `/springmvchello/sayhi`, and the Path of sayHello is `/springmvchello/sayhello`, if you wish them `/sayhi` and `/sayhello`, please change the setting of `@RequestMapping` on the SpringmvcHelloImpl to `@RequestMapping("/")`.
+### add a component scan (optional)
 
-* **Step 3** Release the service. Add @RestSchema as the annotation of the service implementation class and specify schemaId, which indicates that the implementation is released as a schema of the current microservice. The code is as follows:
+create `resources/META-INF/spring` folder and add `springmvcprovider.bean.xml`, add component-scan to specify the bean package. This step is optional. The package where main class located is automatically added.
 
-   ```java
-   import org.apache.servicecomb.provider.rest.common.RestSchema;
-   // other code omitted
-   @RestSchema(schemaId = "springmvcHello")
-   public class SpringmvcHelloImpl {
-     // other code omitted
-   }
-   ```
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
 
-   Create the ```springmvcHello.bean.xml```  file(the file name format is *.bean.xml) in the ``` resources/META-INF/spring``` directory and configure base-package that performs scanning. The content of the file is as follows:
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
+       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
-   ```xml
-   <?xml version="1.0" encoding="UTF-8"?>
+    <context:component-scan base-package="org.apache.servicecomb.samples.springmvc.povider"/>
+</beans>
+```
 
-   <beans xmlns="http://www.springframework.org/schema/beans"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xmlns:context="http://www.springframework.org/schema/context"
-          xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
-          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+### Wrtie a main class
 
-       <context:component-scan base-package="org.apache.servicecomb.samples.springmvc.provider"/>
-   </beans>
-   ```
+This code using log4j as the logger framework. Users can change it to any other favorite logger framework. 
 
-* **Step 4** Add service definition file:
+```java
+public class SpringmvcProviderMain {
 
-   Add [microservice.yaml](http://servicecomb.incubator.apache.org/cn/users/service-definition/) file into resources folder of your project.
+  public static void main(String[] args) throws Exception {
+    Log4jUtils.init();
+    BeanUtils.init();
+  }
+}
+```
 
-* **Step 5** Add Main class:
+## Using POJO as query parameters
 
-   ```java
-   import org.apache.servicecomb.foundation.common.utils.BeanUtils;
-   import org.apache.servicecomb.foundation.common.utils.Log4jUtils;
+### Description
 
-   public class Application {
-     public static void main(String[] args) throws Exception {
-        //initializing log, loading bean(including its parameters), and registering service, more detail can be found here : http://servicecomb.incubator.apache.org/users/application-boot-process/
-        Log4jUtils.init();
-        BeanUtils.init();
-     }
-   }
-   ```
+SpringBoot supports to map a bean parameter to HTTP queries. 
+```java
+@RequestMapping("/hello")
+public class HelloService {
+  @RequestMapping(value = "/sayHello", method = RequestMethod.GET)
+  public String sayHello(Person person) {
+    System.out.println("sayHello is called, person = [" + person + "]");
+    return "Hello, your name is " + person.getName() + ", and age is " + person.getAge();
+  }
+}
+```
 
-## Involved APIs
+ServiceComb supports this usage too, but has following constraints.
+1. Must not add any mapping annotations, such as @QueryParam
+2. Only map to query parameters, headers and forms not supported.
+3. Variables name in POJO definition must be the same as query keys.
+4. Only primitive and String types supported in POJO, add `@JsonIgnore` to other types to ignore it.
+5. In consumer site(e.g RestTemplate), still need to use query parameters, can not use POJO. 
 
-Currently, the Spring MVC development mode supports the following annotations in the org.springframework.web.bind.annotation package. For details about how to use the annotations, see [Spring MVC official documentation](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)。
+### Examples
 
-| Remarks        | Location         | Description                              |
-| :------------- | :--------------- | :--------------------------------------- |
-| RequestMapping | schema/operation | Data of path, method or produces is allowed. By default, an operation inherits produces from a schema. |
-| GetMapping     | schema/operation | Data of path or produces is allowed. By default, an operation inherits produces from a schema. |
-| PutMapping     | schema/operation | Data of path or produces is allowed, an operation inherits produces from a schema. |
-| PostMapping    | schema/operation | Data of path or produces is allowed, an operation inherits produces from a schema. |
-| DeleteMapping  | schema/operation | Data of path or produces is allowed, an operation inherits produces from a schema. |
-| PatchMapping   | schema/operation | Data of path or produces is allowed, an operation inherits produces from a schema. |
-| PathVariable   | parameter        | Obtain parameters from path.             |
-| RequestParam   | parameter        | Obtain parameters from query.            |
-| RequestHeader  | parameter        | Obtain parameters from header.           |
-| RequestBody    | parameter        | Obtain parameters from body. Each operation can have only one body parameter. |
+#### Provider
+
+- service definition
+```java
+  @RestSchema(schemaId = "helloService")
+  @RequestMapping("/hello")
+  public class HelloService {
+    @RequestMapping(value = "/sayHello", method = RequestMethod.GET)
+    public String sayHello(Person person) {
+      System.out.println("sayHello is called, person = [" + person + "]");
+      return "Hello, your name is " + person.getName() + ", and age is " + person.getAge();
+    }
+  }
+```
+- parameters
+```java
+  public class Person {
+    private String name;
+    private int age;
+    @JsonIgnore  // add @JsonIgnore to unsupported types
+    private List<Person> children;
+  }
+```
+- Schemas
+```yaml
+
+basePath: "/hello"
+paths:
+  /sayHello:
+    get:
+      operationId: "sayHello"
+      parameters:
+        # name and age is query parameter
+      - name: "name"
+        in: "query"
+        required: false
+        type: "string"
+      - name: "age"
+        in: "query"
+        required: false
+        type: "integer"
+        format: "int32"
+      responses:
+        200:
+          description: "response of 200"
+          schema:
+            type: "string"
+```
+
+#### Consumer
+
+- Call using RPC
+  - add an interface
+  ```java
+    public interface HelloServiceIntf {
+      String sayHello(String name, int age);
+    }
+  ```
+  - call the interface
+  ```java
+    String result = helloService.sayHello("Bob", 22); // result is "Hello, your name is Bob, and age is 22"
+  ```
+- Call using RestTemplate
+  ```java
+    String result = restTemplate.getForObject(
+      "cse://provider-service/hello/sayHello?name=Bob&age=22",
+      String.class); 
+  ```
+
+## ServiceComb suppoted Spring MVC annotations and differences
+
+ServiceComb supports Spring MVC annotatioins\(org.springframework.web.bind.annotation\) to define REST interfaces, but they are different. ServiceComb do not support @Controller frameworks and only support @RestController frameworks. 
+
+* Differences in supported annotations
+
+### Table 1-1 annotations
+
+| annotation | supported | notes |
+| :--- | :--- | :--- |
+| RequestMapping | Yes | Can only have one path, multiple path is not supported. |
+| GetMapping | Yes |  |
+| PutMapping | Yes |  |
+| PostMapping | Yes |  |
+| DeleteMapping | Yes |  |
+| PatchMapping | Yes |  |
+| RequestParam | Yes |  |
+| CookieValue | Yes |  |
+| PathVariable | Yes |  |
+| RequestHeader | Yes |  |
+| RequestBody | Yes | supports application/json,plain/text |
+| RequestPart | Yes | Used in file upload. Using Part、MultipartFile annotations. |
+| ResponseBody | No | @Controller framework is not supported |
+| ResponseStatus | No | Using ApiResponse to define status code |
+| RequestAttribute | No |  |
+| SessionAttribute | No |  |
+| MatrixVariable | No |  |
+| ModelAttribute | No |  |
+| ControllerAdvice | No |  |
+| CrossOrigin | No |  |
+| ExceptionHandler | No |  |
+| InitBinder | No |  |
+
+* Define a REST service
+
+Spring MVC using @RestController to define a REST service,ServiceComb using @RestSchema to define a REST service,and path value in @RequestMapping is required.
+
+```
+@RestSchema(schemaId = "hello")
+@RequestMapping(path = "/")
+```
+
+@RestController is also supported and equals to @RestSchma(schemaId="class name"). However we suggest using @RestSchemaand define a schemaId,it more convenient when used in configurations.  
+
+* Supported data types
+
+Spring MVC supports almost all java types in service difinition, e.g.
+
+```
+// abstract class
+public void postData(@RequestBody Object data)
+// interface
+public void postData(@RequestBody IPerson interfaceData)
+// generic without types
+public void postData(@RequestBody Map rawData)
+// servlet types
+public void postData(HttpServletRequest rquest)
+```
+
+ServiceComb need to generate Open API schemas based on definition, and support cross language features, so some of there usage is not supported. 
+
+HttpServletRequest,Object is supported in latest version, but they are different. We suggest not using there features if possible.
+
+please refer to [API Constraints](/build-provider/interface-constraints.md) for data type supports.
diff --git a/java-chassis-reference/zh_CN/build-provider/springmvc.md b/java-chassis-reference/zh_CN/build-provider/springmvc.md
index 9f24be5..2da2dae 100644
--- a/java-chassis-reference/zh_CN/build-provider/springmvc.md
+++ b/java-chassis-reference/zh_CN/build-provider/springmvc.md
@@ -2,13 +2,13 @@
 
 ## 概念阐述
 
-ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。建议参照着项目 [SpringMVC](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/springmvc-sample)进行详细阅读
+ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。建议参照着项目 [SpringMVC](https://github.com/apache/servicecomb-java-chassis/tree/master/samples/springmvc-sample)进行详细阅读
 
 ## 开发示例
 
-### 步骤 1定义服务接口。
+### 步骤 1定义服务接口(可选,方便使用RPC方式调用)
 
-根据开发之前定义好的契约,编写Java业务接口,代码如下。定义接口不是必须的,但是 一个好习惯,可以简化客户端使用RPC方式编写代码。
+定义接口不是必须的,但是 一个好习惯,可以简化客户端使用RPC方式编写代码。
 
 ```java
 public interface Hello {
@@ -19,7 +19,7 @@
 
 
 
-### 步骤 2实现服务。
+### 步骤 2实现服务
 
 使用Spring MVC注解开发业务代码,Hello的服务实现如下。在服务的实现类上打上注解@RestSchema,指定schemaId,schemaId必须保证微服务范围内唯一。
 
@@ -41,7 +41,7 @@
 }
 ```
 
-### 步骤 3发布服务
+### 步骤 3发布服务 (可选,默认会扫描main函数所在的package)
 
 在`resources/META-INF/spring`目录下创建`springmvcprovider.bean.xml`文件,命名规则为`\*.bean.xml`,配置spring进行服务扫描的base-package,文件内容如下:
 
@@ -60,7 +60,7 @@
 
 ### 步骤 4启动provider 服务
 
-进行主要相关配置初始化。
+下面的代码使用Log4j作为日志记录器。开发者可以方便使用其他日志框架。
 
 ```java
 public class SpringmvcProviderMain {
@@ -72,20 +72,6 @@
 }
 ```
 
-## 涉及API
-
-Spring MVC开发模式当前支持org.springframework.web.bind.annotation包下的如下注解,所有注解的使用方法参考[Spring MVC官方文档](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)。
-
-### 表1-1 Spring MVC注解支持汇总
-
-| 注解 | 位置 | 描述 |
-| :--- | :--- | :--- |
-| RequestMapping | schema/operation | 支持标注path/method/produces三种数据,operation默认继承schema上的produces |
-| PathVariable | parameter | 从path中获取参数 |
-| RequestParam | parameter | 从query中获取参数 |
-| RequestHeader | parameter | 从header中获取参数 |
-| RequestBody | parameter | 从body中获取参数,每个operation只能有一个body参数 |
-
 ## Query参数聚合为POJO对象
 
 ### 使用说明
@@ -180,3 +166,78 @@
       "cse://provider-service/hello/sayHello?name=Bob&age=22",
       String.class); // 调用效果与RPC方式相同
   ```
+
+## ServiceComb支持的Spring MVC标签说明
+
+ServiceComb支持使用Spring MVC提供的标签\(org.springframework.web.bind.annotation\)来声明REST接口,但是两者是独立的实现,而且有不一样的设计目标。CSE的目标是提供跨语言、支持多通信协议的框架,因此去掉了Spring MVC中一些对跨语言支持不是很好的特性,也不支持特定运行框架强相关的特性,比如直接访问Servlet协议定义的HttpServletRequest。ServiceComb没有实现@Controller相关功能, 只实现了@RestController,即通过MVC模式进行页面渲染等功能都是不支持的。
+
+下面是一些具体差异。
+
+* 常用标签支持
+
+下面是CSE对于Spring MVC常用标签的支持情况。
+
+### 表1-1 Spring MVC注解情况说明
+
+| 标签名称 | 是否支持 | 说明 |
+| :--- | :--- | :--- |
+| RequestMapping | 是 | 不允许制定多个Path,一个接口只允许一个Path |
+| 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 | 否 |  |
+
+* 服务声明方式
+
+Spring MVC使用@RestController声明服务,而ServiceComb使用@RestSchema声明服务,并且需要显示的使用@RequestMapping声明服务路径,以区分该服务是采用Spring MVC的标签还是使用JAX RS的标签。
+
+```
+@RestSchema(schemaId = "hello")
+@RequestMapping(path = "/")
+```
+
+Schema是CSE的服务契约,是服务运行时的基础,服务治理、编解码等都基于契约进行。在跨语言的场景,契约也定义了不同语言能够同时理解的部分。
+
+最新版本也支持@RestController声明,等价于@RestSchma(schemaId="服务的class名称"),建议用户使用@RestSchema显示声明schemaId,在管理接口基本的配置项的时候,更加直观。
+
+* 数据类型支持
+
+采用Spring MVC,可以在服务定义中使用多种数据类型,只要这种数据类型能够被json序列化和反序列化。比如:
+
+```
+// 抽象类型
+public void postData(@RequestBody Object data)
+// 接口定义
+public void postData(@RequestBody IPerson interfaceData)
+// 没指定类型的泛型
+public void postData(@RequestBody Map rawData)
+// 具体协议相关的类型
+public void postData(HttpServletRequest rquest)
+```
+
+ServiceComb会根据接口定义生成契约,从上面的接口定义,如果不结合实际的实现代码或者额外的开发文档说明,无法直接生成契约。也就是站在浏览器的REST视角,不知道如何在body里面构造消息内容。ServiceComb不建议定义接口的时候使用抽象类型、接口等。
+
+为了支持快速开发,ServiceComb的数据类型限制也在不停的扩充,比如支持HttpServletRequest,Object等。但是实际在使用的时候,他们与WEB服务器的语义是不一样的,比如不能直接操作流。因此建议开发者在ServiceComb的使用场景下,尽可能使用契约能够描述的类型,让代码阅读性更好。
+
+ServiceComb在数据类型的支持方面的更多说明,请参考: [接口定义和数据类型](/build-provider/interface-constraints.md)
+
+* 其他
+更多开发过程中碰到的问题,可以参考[案例](https://bbs.huaweicloud.com/blogs/8b8d8584e70d11e8bd5a7ca23e93a891)。开发过程中存在疑问,也可以在这里进行提问。
+