问题描述:
前端查询后端的pcs总数字段,此字段需要从mydsql的db中获取。PCS字段类型为decimal(26,6),于是打算在response中使用 BigDecimal pcs来接收
结果:
报错Thrift class ‘DTO’ field ‘pcs’ type ‘java.math.BigDecimal’ is not a supported Java type
原因:
Thrift 不支持BigDecimal
Thrif支持的数据类型
https://www.cnblogs.com/horace/p/4415748.html
解决:
需要将bigdecimal 与double转换
https://www.cnblogs.com/Wenxu/p/10341182.html
规范
-
属性 ID 可以顺序追加,不可更改已有属性 ID & 数据类型
-
参数支持的容器类型: List、Set、Map
-
自定义异常必须继承自 AbstractThriftException,同时重写toString方法(AbstractThriftException的toString方法不够明确)
-
Thrift 注解代码 和IDL生成的目标代码, 不能相互引用
-
所有的 POJO 类属性强烈建议使用包装数据类型,如果用基础类型的话无法使用IDL方式里的isSet来判断某个属性是否被赋值过。
-
RPC 方法的返回值必须使用包装数据类型
-
RPC 方法的参数如果是包装数据类型(Integer、Long等),同时又传null的话,服务端收到时会分配对应的基础类型的默认值。
(注意:如果是对象内部的字段是包装数据类型的话,客户端传null值,若定义字段时有默认值,服务端会收到此值,否则收到null值)
-
一个类只能有一个带有@ThriftConstructor注解的构造函数