Skip to content

Commit

Permalink
[#4637]support BigDecimal and BigInteger
Browse files Browse the repository at this point in the history
  • Loading branch information
liubao68 committed Dec 17, 2024
1 parent dc1b5dd commit ab4ce16
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public void setEnvironment(Environment environment) {

@Autowired
@Lazy
public void setTelnetInstancePing(@Qualifier("telnetInstancePing") TelnetInstancePing telnetInstancePing) {
public void setTelnetInstancePing(@Qualifier("scbTelnetInstancePing") TelnetInstancePing telnetInstancePing) {
this.telnetInstancePing = telnetInstancePing;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
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;
Expand Down Expand Up @@ -404,6 +406,8 @@ public static boolean isBean(Type type) {
&& 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));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -66,10 +68,14 @@ private static void initTypeFormatMap() {
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"),
Expand Down

0 comments on commit ab4ce16

Please sign in to comment.