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 b69146074 [#4637]support BigDecimal and BigInteger (#4645)
b69146074 is described below

commit b6914607421ba093c191edf340f18cab5ab09e43
Author: liubao68 <[email protected]>
AuthorDate: Tue Dec 17 17:01:05 2024 +0800

    [#4637]support BigDecimal and BigInteger (#4645)
---
 .../demo/springmvc/client/TestBigNumberSchema.java | 59 ++++++++++++++++++++++
 .../demo/springmvc/server/BigNumberSchema.java     | 45 +++++++++++++++++
 .../basic/integration/HealthInstancePing.java      |  2 +-
 .../apache/servicecomb/swagger/SwaggerUtils.java   |  4 ++
 .../swagger/converter/ConverterMgr.java            |  6 +++
 5 files changed, 115 insertions(+), 1 deletion(-)

diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestBigNumberSchema.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestBigNumberSchema.java
new file mode 100644
index 000000000..3b70709e6
--- /dev/null
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestBigNumberSchema.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.demo.springmvc.client;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.apache.servicecomb.demo.CategorizedTestCase;
+import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.provider.pojo.RpcReference;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TestBigNumberSchema implements CategorizedTestCase {
+  interface IBigNumberSchema {
+    BigInteger bigInteger(BigInteger intHeader, BigInteger intQuery, 
BigInteger intForm);
+
+    BigDecimal bigDecimal(BigDecimal decimalHeader, BigDecimal decimalQuery, 
BigDecimal decimalForm);
+  }
+
+  @RpcReference(microserviceName = "springmvc", schemaId = "BigNumberSchema")
+  private IBigNumberSchema schema;
+
+  @Override
+  public void testAllTransport() throws Exception {
+    testBigInteger();
+    testBigDecimal();
+  }
+
+  public void testBigInteger() {
+    BigInteger result = schema.bigInteger(BigInteger.valueOf(100L), 
BigInteger.valueOf(3000000000000000000L),
+        BigInteger.valueOf(200L));
+    TestMgr.check("3000000000000000300", result.toString());
+  }
+
+  public void testBigDecimal() {
+    BigDecimal a = BigDecimal.valueOf(100.1D);
+    BigDecimal b = BigDecimal.valueOf(300000000000000000.1D);
+    BigDecimal c = BigDecimal.valueOf(200.1D);
+    BigDecimal expected = a.add(b).add(c);
+    BigDecimal result = schema.bigDecimal(a, b, c);
+    TestMgr.check(expected, result);
+  }
+}
diff --git 
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/BigNumberSchema.java
 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/BigNumberSchema.java
new file mode 100644
index 000000000..1190fde43
--- /dev/null
+++ 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/BigNumberSchema.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.demo.springmvc.server;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@RestSchema(schemaId = "BigNumberSchema")
+@RequestMapping("/bigNumber")
+public class BigNumberSchema {
+  @PostMapping(path = "/integer", consumes = 
MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+  public BigInteger bigInteger(@RequestHeader("intHeader") BigInteger 
intHeader,
+      @RequestParam("intQuery") BigInteger intQuery, 
@RequestAttribute("intForm") BigInteger intForm) {
+    return intHeader.add(intQuery).add(intForm);
+  }
+
+  @PostMapping(path = "/decimal", consumes = 
MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+  public BigDecimal bigDecimal(@RequestHeader("decimalHeader") BigDecimal 
decimalHeader,
+      @RequestParam("decimalQuery") BigDecimal decimalQuery, 
@RequestAttribute("decimalForm") BigDecimal decimalForm) {
+    return decimalHeader.add(decimalQuery).add(decimalForm);
+  }
+}
diff --git 
a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
 
b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
index d128365e1..79db6818e 100644
--- 
a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
+++ 
b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
@@ -59,7 +59,7 @@ public class HealthInstancePing implements InstancePing {
 
   @Autowired
   @Lazy
-  public void setTelnetInstancePing(@Qualifier("telnetInstancePing") 
TelnetInstancePing telnetInstancePing) {
+  public void setTelnetInstancePing(@Qualifier("scbTelnetInstancePing") 
TelnetInstancePing telnetInstancePing) {
     this.telnetInstancePing = telnetInstancePing;
   }
 
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
index 617aa7952..211a612a8 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
@@ -22,6 +22,8 @@ import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
@@ -404,6 +406,8 @@ public final class SwaggerUtils {
         && cls != LocalDateTime.class
         && cls != byte[].class
         && cls != File.class
+        && cls != BigInteger.class
+        && cls != BigDecimal.class
         && 
!cls.getName().equals("org.springframework.web.multipart.MultipartFile")
         && !Part.class.isAssignableFrom(cls));
   }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
index 6f160a390..5705f2460 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/converter/ConverterMgr.java
@@ -17,6 +17,8 @@
 
 package org.apache.servicecomb.swagger.converter;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.HashMap;
@@ -66,10 +68,14 @@ public final class ConverterMgr {
         TypeFactory.defaultInstance().constructType(Integer.class));
     TYPE_FORMAT_MAP.put(genTypeFormatKey("integer", "int64"),
         TypeFactory.defaultInstance().constructType(Long.class));
+    TYPE_FORMAT_MAP.put(genTypeFormatKey("integer", ""),
+        TypeFactory.defaultInstance().constructType(BigInteger.class));
     TYPE_FORMAT_MAP.put(genTypeFormatKey("number", "float"),
         TypeFactory.defaultInstance().constructType(Float.class));
     TYPE_FORMAT_MAP.put(genTypeFormatKey("number", "double"),
         TypeFactory.defaultInstance().constructType(Double.class));
+    TYPE_FORMAT_MAP.put(genTypeFormatKey("number", ""),
+        TypeFactory.defaultInstance().constructType(BigDecimal.class));
     TYPE_FORMAT_MAP.put(genTypeFormatKey("string", ""),
         TypeFactory.defaultInstance().constructType(String.class));
     TYPE_FORMAT_MAP.put(genTypeFormatKey("string", "date"),

Reply via email to