Commit 68af46ddc7b01ffba73fa1bcf36484cf1792f049
1 parent
8e43004c
fix(product):C 端商品分页缺 sortAsc 参数 NPE 500 改空安全
GET /app-api/product/spu/page 只带 sortField、缺 sortAsc(合法但参数 不完整)时,getSortAsc()(Boolean)在 orderBy/三目拆箱处 null 直接 NPE 500(A52),旧版 App/第三方/爬虫都会踩空。 排序逻辑处统一取空安全默认(缺省按升序),三个排序分支共用, 缺参/显式 null 均不再崩。
Showing
1 changed file
with
5 additions
and
3 deletions
yudao-module-mall/yudao-module-product/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java
| @@ -76,14 +76,16 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> { | @@ -76,14 +76,16 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> { | ||
| 76 | query.eq(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()); | 76 | query.eq(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()); |
| 77 | 77 | ||
| 78 | // 排序逻辑 | 78 | // 排序逻辑 |
| 79 | + // 排序方式(sortAsc)可能缺省或显式传 null(合法但参数不完整的组合),缺省按升序处理,避免拆箱 null 崩 500 | ||
| 80 | + Boolean sortAsc = pageReqVO.getSortAsc() != null ? pageReqVO.getSortAsc() : Boolean.TRUE; | ||
| 79 | if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_SALES_COUNT)) { | 81 | if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_SALES_COUNT)) { |
| 80 | query.last(String.format(" ORDER BY (sales_count + virtual_sales_count) %s, sort DESC, id DESC", | 82 | query.last(String.format(" ORDER BY (sales_count + virtual_sales_count) %s, sort DESC, id DESC", |
| 81 | - pageReqVO.getSortAsc() ? "ASC" : "DESC")); | 83 | + sortAsc ? "ASC" : "DESC")); |
| 82 | } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_PRICE)) { | 84 | } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_PRICE)) { |
| 83 | - query.orderBy(true, pageReqVO.getSortAsc(), ProductSpuDO::getPrice) | 85 | + query.orderBy(true, sortAsc, ProductSpuDO::getPrice) |
| 84 | .orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId); | 86 | .orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId); |
| 85 | } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_CREATE_TIME)) { | 87 | } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_CREATE_TIME)) { |
| 86 | - query.orderBy(true, pageReqVO.getSortAsc(), ProductSpuDO::getCreateTime) | 88 | + query.orderBy(true, sortAsc, ProductSpuDO::getCreateTime) |
| 87 | .orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId); | 89 | .orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId); |
| 88 | } else { | 90 | } else { |
| 89 | query.orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId); | 91 | query.orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId); |