-
Notifications
You must be signed in to change notification settings - Fork 823
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Servicecomb3.0不支持BigDecimal类型 #4637
Comments
你们前端是怎么调用这个接口的? |
就是小数用BigDecimal接收,因为计算都是BigDecimal,这样可以少写一个类型转换 |
这个接口主要是用于内部调用吗?我问上面的问题主要是关注下前端是怎么调用这个接口的(比如通过HTTP 测试工具, 浏览器等)。 因为需要考虑REST接口方面的兼容。 |
是的,都是内部调用 |
还需要再考虑下怎么定义这种场景的序列化表示。 |
https://swagger.io/docs/specification/v3_0/data-models/data-types/#numbers OpenAPI 数据类型只有 number和integer,无法涵盖 BigInteger和BigDecimal。 但是一般也是用这两种类型表示。 因此使用BigInteger和BigDecimal不是一个符合OpenAPI的好的实践,但也可以考虑支持query/header/form这些简单参数使用。 |
我临时修改是这样,不是很规范,但能正常工作: Lines 386 to 409 in f46b97e
改成: return (cls != String.class
&& cls != Date.class
&& cls != LocalDate.class
&& cls != LocalDateTime.class
&& cls != BigDecimal.class
&& cls != byte[].class
&& cls != File.class
&& !cls.getName().equals("org.springframework.web.multipart.MultipartFile")
&& !Part.class.isAssignableFrom(cls)); Lines 62 to 86 in f46b97e
加了一行 TYPE_FORMAT_MAP.put(genTypeFormatKey("number", ""),
TypeFactory.defaultInstance().constructType(BigDecimal.class)); |
你的方案感觉是可行的。 我也是按照你的方案改的。 |
上述修改方案测试代码的swagger如下。 意味着在servicecomb内部使用
|
上述swagger按照理解也是符合swagger语义的,没问题,理解错了。 see: https://swagger.io/docs/specification/v3_0/data-models/data-types/#numbers |
背景
项目从Servicecomb2.8迁移到Servicecomb3.2.3
问题
BigDecimal作为参数或返回值时无法正常解析
1、BigDecimal参数
@GetMapping("/demo") public String echo(@RequestParam BigDecimal v) { return "ok"; }
报错信息
Caused by: java.lang.IllegalStateException: failed to find producer parameter in contract, method=ConsumerEndpoint:echo, parameter name=v. at org.apache.servicecomb.swagger.invocation.arguments.producer.ProducerArgumentsMapperCreator.processUnknownParameter
2、BigDecimal返回值
@GetMapping("/demo") public BigDecimal echo(@RequestParam String v) { return null; }
报错信息
Caused by: java.lang.Error: not support def type: class io.swagger.v3.oas.models.media.NumberSchema at org.apache.servicecomb.swagger.converter.ConverterMgr.findJavaType(ConverterMgr.java:111)
预期
应该能正常序列化和反序列化
The text was updated successfully, but these errors were encountered: