feat(framework): 全局 Long 字符串化,ID 一律以字符串下发
用户裁定方案 (a):雪花 id 精度问题全局修,统一契约。 - 新增 JacksonLongToStringConfig(fruitshorts-framework):Long/Long.TYPE → ToStringSerializer, 经 Jackson2ObjectMapperBuilderCustomizer 挂进 Spring Boot 的 ObjectMapper;admin-api 与 app-api 都是 scanBasePackages=com.fruitshorts,一处生效两端一致 - 例外:PageResult.total 是计数不是 id,用 mixin 显式保持数字(前端分页组件要数字); Integer/int(pageIndex/pageSize/Result.code 等)不受影响 - 反序列化方向不变:请求体 'id:123'、路径变量、查询参数都接受字符串 - 契约 api-phase1.md §0 新增「ID 字段一律以字符串下发」总口径,§2.11/§2.12 改为引用 §0; I1 里逐字段加的 @JsonSerialize 与 Result<String> 回退成自然写法,避免多套口径 - 测试:新增 LongToStringSerializationTest(普通/嵌套/List/Map/分页 + 反序列化 + 19 位路径变量), 契约测试的 standalone mapper 也挂上模块(否则测试假绿);C 端 4 条 id 断言改成 isString - mvn test:commerce 33 / admin-api 21 / app-api 49 / worker 12 = 115 条全过
This commit is contained in:
1 parent
c503629bf9
commit
f35db2cd3b
16 files changed
+355
-33
No files matched your search
+1
-8
@@ -2,8 +2,6 @@
|
||||
|
||||
package com.fruitshorts.commerce.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import com.fruitshorts.commerce.dal.entity.Product;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -18,12 +16,7 @@ import java.time.LocalDateTime;
|
||||
@Data
|
||||
public class ProductRespVO {
|
||||
|
||||
/**
|
||||
* 雪花 id 超过 JS 的安全整数范围(2^53-1),直接下发数字会被浏览器四舍五入 ——
|
||||
* 后台页面再拿这个 id 回查就会"商品不存在"。所以 id 一律以**字符串**下发,
|
||||
* 前端原样拼进 URL 即可(详见 api-phase1.md §2.11)。
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
/** id 由全局规则以字符串下发(见 api-phase1.md §0「ID 一律字符串」),这里不需要逐字段注解。 */
|
||||
private Long id;
|
||||
private String code;
|
||||
private String name;
|
||||
|
||||
Reference in new issue
Block a user