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)); } }