问题描述:
前端查询后端的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注解的构造函数
接口|req|resp|DTO定义
include "Common.thrift"
include "SkuTag.thrift"
typedef Common.Operator Operator
typedef Common.Paging Paging
typedef Common.Status Status
typedef Common.VmiTException VmiTException
typedef SkuTag.SkuTagTModel SkuTagTModel
/**
* @TypeDoc(description = "请求参数")
*/
struct SkuPreSellTRequest {
1: string codeOrName;
2: i64 supplierId;
3: i64 pickDate;
4: i64 poiId = -1;
5: i64 skuId;
6: string barCode;
7: string skuName;
8: i64 pickBeginDate;
9: i64 pickEndDate;
10: Paging paging;
11: i64 categoryId;
12: i32 temperatureLevel;
13: list<i64> categoryIds;
14: i32 processPlan;
15: i32 xtTransfer;
16: list<i64> skuIds;
17: list<string> barCodes;
18: i32 xtAllocate;
}
/**
* @TypeDoc(description = "返回参数")
*/
struct SkuStockSaleInfo{
1: i64 supplierId;
2: string supplierCode;
3: string supplierName;
4: i64 skuId;
5: string barCode;
6: string skuName;
7: string categoryName;
8: i64 unitId;
9: string unitName;
10: string spec;
11: string saleQuantity;
12: string stock;
13: string stockGap;
14: string quantityShipped;
15: i64 defaultShippingId;
16: string reservationIntransit;
17: i32 inSale;
18: i32 temperatureLevel;
19: string temperatureLevelName;
20: i32 highValueStatus;
21: string highValueStatusName;
22: string maxStock;
23: list<SkuTagTModel> skuTagList;
24: string transferIntransit;
25: string intransitStock;
26: string supplierTypeNames;
27: i32 processPlan;
28: string pcIntransitStock;
29: string fulfillmentGap;
30: string signInstransitQty;
31: i32 riskSku;
32: i32 xtTransfer;
33: i32 xtAllocate;
}
/**
* @TypeDoc(description = "返回实体")
*/
struct SkuStockInfoTResponse{
/**
* @FieldDoc(
* description = "接口状态码,0成功,其他异常",
* example = {0}
* )
*/
1: i32 code;
/**
* @FieldDoc( description = "接口返回信息", example = {"success"})
*/
2: string msg;
/**
* @FieldDoc(description ="数据列表")
*/
3: list<SkuStockSaleInfo> SkuSaleInfoList;
/**
* @FieldDoc(description ="总数")
*/
4: i32 total;
}
/**
* @TypeDoc(description = "请求参数")
*/
struct TransferForOtherStockTRequest{
/**
* @FieldDoc(description = "供应商ID")
*/
1: i64 supplierId = -1;
/**
* @FieldDoc(description = "自提日期")
*/
2: i64 pickDate;
/**
* @FieldDoc(description = "转运起始仓")
*/
3: i64 originPoiId = -1;
/**
* @FieldDoc(description = "转运目的仓")
*/
4: i64 targetPoiId = -1;
/**
* @FieldDoc(description = "skuId")
*/
5: i64 skuId = -1;
/**
* @FieldDoc(description = "商品条码")
*/
6: string barCode;
/**
* @FieldDoc(description = "商品名称")
*/
7: string skuName;
/**
* @FieldDoc(description = "自提起始日期")
*/
8: i64 pickBeginDate;
/**
* @FieldDoc(description = "自提结束日期")
*/
9: i64 pickEndDate;
/**
* @FieldDoc(description = "分页参数")
*/
10: Paging paging;
/**
* @FieldDoc(description = "二级品类id")
*/
11: i64 categoryId = -1;
/**
* @FieldDoc(description = "储藏条件")
*/
12: i32 temperatureLevel = -1;
/**
* @FieldDoc(description = "二级品类ids")
*/
13: list<i64> categoryIds;
/**
* @FieldDoc(description = "操作人")
*/
14: Operator operator;
}
/**
* @InterfaceDoc(
* displayName = "优选备货目标页相关接口",
* description = "备货和预约页相关接口",
* scenarios = "备货和预约页相关接口"
* )
*/
service SupplierSkuTService {
SkuStockInfoTResponse querySkuStock(1: SkuPreSellTRequest request) throws (1: VmiTException vmiTException);
}