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"),