日期:2026-10-17 对比对象:线上 PHP(shop.qinys.cn,带 Access-Token) vs Java 重写版(localhost:18080)
11 组参数组合全部 PASS:total、per_page、last_page、返回商品 ID 顺序、每个商品的 39 个字段(含嵌套 images.file、goods_images、价格字符串、图片 URL)完全一致。
| 用例 | 结果 |
|---|---|
| 默认(page=1&listRows=15) | PASS |
| goodsName 模糊搜索 | PASS |
| status=10 上架筛选 | PASS |
| listType=on_sale | PASS |
| sortType=sales 销量排序 | PASS |
| sortType=price 升/降序 | PASS ×2 |
| page=2/3 翻页 | PASS |
| categoryId 分类筛选 | PASS |
| goodsNo 货号搜索 | PASS |
字段级 diff(8 商品 × 39 字段):差异 0。
getList($param) 的 $listRows 用默认值 15 → Java 端同样固定 15,忽略请求里的 listRows。"168.00"(DECIMAL(10,2) → 字符串序列化),Java 用 ToStringSerializer。Y-m-d H:i:s(东八区)。preview_url = base_url + /uploads/ + file_path;goods_image 取图集第一张的 preview_url。# 启动 Java 版(本机 8080 被占,用 18080)
cd F:\shop\java-rewrite\yoshop-java
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=18080
# 逐字段对比
python -X utf8 ..\tools\compare_goods.py
# 黄金样本
# golden/store_goods_list.json PHP 原始响应(listRows=2)
# golden/java_goods_list.json Java 原始响应(listRows=15)