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-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 823ad39  [SCB-2053]support define interface or abstract class as model
823ad39 is described below

commit 823ad39ded25ac3423909f7dc275e853d7f6b7f4
Author: liubao <bi...@qq.com>
AuthorDate: Thu Jul 30 20:53:57 2020 +0800

    [SCB-2053]support define interface or abstract class as model
---
 .../demo/jaxrs/client/SchemeInterfaceJaxrs.java        |  4 ++++
 .../demo/jaxrs/client/TestSchemeInterfaceJaxrs.java    | 18 ++++++++++++++++++
 .../demo/jaxrs/server/SchemeInterfaceJaxrs.java        |  5 +++++
 .../demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java    |  6 ++++++
 .../jaxrs-server/src/main/resources/microservice.yaml  |  5 ++++-
 demo/demo-jaxrs/pom.xml                                |  9 +++++++++
 .../swagger/generator/springdata/SpringDataModule.java | 11 +++++++++--
 .../springdata/TestPageResponseTypeProcessor.java      | 11 +++++------
 8 files changed, 60 insertions(+), 9 deletions(-)

diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/SchemeInterfaceJaxrs.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/SchemeInterfaceJaxrs.java
index 53f4c07..a074ad9 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/SchemeInterfaceJaxrs.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/SchemeInterfaceJaxrs.java
@@ -17,8 +17,12 @@
 
 package org.apache.servicecomb.demo.jaxrs.client;
 
+import org.springframework.data.domain.Page;
+
 public interface SchemeInterfaceJaxrs {
   int add(int a, int b);
 
   int reduce(int a, int b);
+
+  Page<String> interfaceModel(Page<String> model);
 }
diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestSchemeInterfaceJaxrs.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestSchemeInterfaceJaxrs.java
index 6ebc4ef..6ba8d17 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestSchemeInterfaceJaxrs.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestSchemeInterfaceJaxrs.java
@@ -17,9 +17,17 @@
 
 package org.apache.servicecomb.demo.jaxrs.client;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.servicecomb.demo.CategorizedTestCase;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.provider.pojo.RpcReference;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Component;
 
 @Component
@@ -27,6 +35,16 @@ public class TestSchemeInterfaceJaxrs implements 
CategorizedTestCase {
   @RpcReference(schemaId = "SchemeInterfaceJaxrs", microserviceName = "jaxrs")
   private SchemeInterfaceJaxrs jaxrs;
 
+  public void testRestTransport() throws Exception {
+    List<String> contents = new ArrayList<>();
+    contents.add("hello");
+    Sort sort = Sort.by(new String[0]);
+    Pageable pageable = PageRequest.of(1, 10, sort);
+    Page<String> pages = new PageImpl<>(contents, pageable, 1);
+    Page<String> result = jaxrs.interfaceModel(pages);
+    TestMgr.check("hello", result.stream().findFirst().get());
+  }
+
   public void testAllTransport() throws Exception {
     TestMgr.check(3, jaxrs.add(1, 2));
 
diff --git 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrs.java
 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrs.java
index e0de028..bd9f07c 100644
--- 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrs.java
+++ 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrs.java
@@ -23,6 +23,7 @@ import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
+import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestParam;
 
 @Path("/jaxrs/schemaInterface")
@@ -31,4 +32,8 @@ public interface SchemeInterfaceJaxrs {
   @Path("/add")
   @GET
   public int add(@Min(1) @RequestParam("a") int a, @Min(1) @RequestParam("b") 
int b);
+
+  @Path("/interfaceModel")
+  @GET
+  Page<String> interfaceModel(Page<String> model);
 }
diff --git 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java
 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java
index edf68e3..cafaed9 100644
--- 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java
+++ 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.demo.jaxrs.server;
 import javax.validation.constraints.Min;
 
 import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.data.domain.Page;
 
 @RestSchema(schemaId = "SchemeInterfaceJaxrs", schemaInterface = 
SchemeInterfaceJaxrs.class)
 public class SchemeInterfaceJaxrsImpl implements SchemeInterfaceJaxrs {
@@ -31,4 +32,9 @@ public class SchemeInterfaceJaxrsImpl implements 
SchemeInterfaceJaxrs {
   public int reduce(int a, int b) {
     return a - b;
   }
+
+  @Override
+  public Page<String> interfaceModel(Page<String> model) {
+    return model;
+  }
 }
diff --git a/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml 
b/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml
index 89f324c..83ed4f4 100644
--- a/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml
+++ b/demo/demo-jaxrs/jaxrs-server/src/main/resources/microservice.yaml
@@ -32,4 +32,7 @@ servicecomb:
       Provider:
         default: bizkeeper-provider
   uploads:
-    directory: target
\ No newline at end of file
+    directory: target
+
+  codec:
+    printErrorMessage: true
\ No newline at end of file
diff --git a/demo/demo-jaxrs/pom.xml b/demo/demo-jaxrs/pom.xml
index 5b348cc..ddd43bb 100644
--- a/demo/demo-jaxrs/pom.xml
+++ b/demo/demo-jaxrs/pom.xml
@@ -37,6 +37,15 @@
       <artifactId>registry-service-center</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>swagger-generator-spring-data</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.data</groupId>
+      <artifactId>spring-data-commons</artifactId>
+      <version>2.1.9.RELEASE</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-slf4j-impl</artifactId>
     </dependency>
diff --git 
a/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java
 
b/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java
index e282da3..e8e06e4 100644
--- 
a/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java
+++ 
b/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java
@@ -48,13 +48,20 @@ public class SpringDataModule extends SimpleModule 
implements SPIOrder {
   @JsonPropertyOrder(alphabetic = true)
   public static class PageableMixin {
     @JsonCreator
-    public PageableMixin(@JsonProperty(value = "page") int page,
-        @JsonProperty("size") int size) {
+    public PageableMixin(@JsonProperty(value = "pageNumber") int page,
+        @JsonProperty("pageSize") int size, @JsonProperty(value = "sort") Sort 
sort) {
     }
   }
 
   @JsonPropertyOrder(alphabetic = true)
+  @JsonDeserialize(as = Sort.class)
   public static class SortMixin {
+    // Notice:
+    // spring data model changed from version to version
+    // for the tested version, sort is not consistency in serialization and 
deserialization
+    @JsonCreator
+    public SortMixin(String... properties) {
+    }
   }
 
   public SpringDataModule() {
diff --git 
a/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java
 
b/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java
index 48dd495..5ae8c09 100644
--- 
a/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java
+++ 
b/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java
@@ -39,15 +39,14 @@ public class TestPageResponseTypeProcessor {
   public void deserialize() throws IOException {
     Json.mapper().registerModule(new SpringDataModule());
 
-    String json = 
"{\"content\":[\"c1\",\"c2\"],\"pageable\":{\"page\":1,\"size\":2}}";
+    String json = 
"{\"content\":[\"c1\",\"c2\"],\"pageable\":{\"pageNumber\":1,\"pageSize\":2}}";
     Page<?> page = Json.mapper().readValue(json, Page.class);
 
     Assert.assertEquals(
-        
"{\"content\":[\"c1\",\"c2\"],\"pageable\":{\"offset\":2,\"pageNumber\":1,\"pageSize\":2,"
-            + 
"\"paged\":true,\"sort\":{\"empty\":true,\"sorted\":false,\"unsorted\":true},"
-            + 
"\"unpaged\":false},\"empty\":false,\"first\":false,\"last\":true,\"number\":1,"
-            + 
"\"numberOfElements\":2,\"size\":2,\"sort\":{\"empty\":true,\"sorted\":false,"
-            + "\"unsorted\":true},\"totalElements\":4,\"totalPages\":2}",
+        
"{\"content\":[\"c1\",\"c2\"],\"pageable\":{\"pageNumber\":1,\"pageSize\":2,"
+            + 
"\"offset\":2,\"paged\":true,\"unpaged\":false},\"empty\":false,\"first\":false,"
+            + "\"last\":true,\"number\":1,\"numberOfElements\":2,\"size\":2,"
+            + "\"totalElements\":4,\"totalPages\":2}",
         Json.mapper().writeValueAsString(page));
   }
 }

Reply via email to