[springboot 开发单体web shop] 7. 多种形式提供商品列表 (2)

接着,在com.liferunner.api.controller.IndexController中实现对外暴露的查询接口:

@RestController @RequestMapping("/index") @Api(value = "首页信息controller", tags = "首页信息接口API") @Slf4j public class IndexController { ... @Autowired private IProductService productService; @GetMapping("/rootCategorys") @ApiOperation(value = "查询一级分类", notes = "查询一级分类") public JsonResponse findAllRootCategorys() { log.info("============查询一级分类=============="); val categoryResponseDTOS = this.categoryService.getAllRootCategorys(); if (CollectionUtils.isEmpty(categoryResponseDTOS)) { log.info("============未查询到任何分类=============="); return JsonResponse.ok(Collections.EMPTY_LIST); } log.info("============一级分类查询result:{}==============", categoryResponseDTOS); return JsonResponse.ok(categoryResponseDTOS); } ... } Test API

编写完成之后,我们需要对我们的代码进行测试验证,还是通过使用RestService插件来实现,当然,大家也可以通过Postman来测试,结果如下:

根据一级分类查询商品列表

商品列表|ProductList

如开文之初我们看到的京东商品列表一样,我们先分析一下在商品列表页面都需要哪些元素信息?

开发梳理

商品列表的展示按照我们之前的分析,总共分为2大类:

选择商品分类之后,展示当前分类下所有商品

输入搜索关键词后,展示当前搜索到相关的所有商品

在这两类中展示的商品列表数据,除了数据来源不同以外,其他元素基本都保持一致,那么我们是否可以使用统一的接口来根据参数实现隔离呢? 理论上不存在问题,完全可以通过传参判断的方式进行数据回传,但是,在我们实现一些可预见的功能需求时,一定要给自己的开发预留后路,也就是我们常说的可拓展性,基于此,我们会分开实现各自的接口,以便于后期的扩展。
接着来分析在列表页中我们需要展示的元素,首先因为需要分上述两种情况,因此我们需要在我们API设计的时候分别处理,针对于
1.分类的商品列表展示,需要传入的参数有:

分类id

排序(在电商列表我们常见的几种排序(销量,价格等等))

分页相关(因为我们不可能把数据库中所有的商品都取出来)

PageNumber(当前第几页)

PageSize(每页显示少条数据)

2.关键词查询商品列表,需要传入的参数有:

关键词

排序(在电商列表我们常见的几种排序(销量,价格等等))

分页相关(因为我们不可能把数据库中所有的商品都取出来)

PageNumber(当前第几页)

PageSize(每页显示多少条数据)

需要在页面展示的信息有:

商品id(用于跳转商品详情使用)

商品名称

商品价格

商品销量

商品图片

商品优惠

...

编码实现

根据上面我们的分析,接下来开始我们的编码:

根据商品分类查询

根据我们的分析,肯定不会在一张表中把所有数据获取全,因此我们需要进行多表联查,故我们需要在自定义mapper中实现我们的功能查询.

ResponseDTO 实现

根据我们前面分析的前端需要展示的信息,我们来定义一个用于展示这些信息的对象com.liferunner.dto.SearchProductDTO,代码如下:

@Data @NoArgsConstructor @AllArgsConstructor @Builder public class SearchProductDTO { private String productId; private String productName; private Integer sellCounts; private String imgUrl; private Integer priceDiscount; //商品优惠,我们直接计算之后返回优惠后价格 } Custom Mapper 实现

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwysfp.html