一、业务分析,根据前端需求返回如下数据格式
二、后端设计数据类型VO
/*** @author TTc* @version 1.0* @date 2024/2/15 16:47*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Catalog2Vo {/*** 一级父分类的 id*/private String catalog1Id;/*** 三级子分类*/private List<Category3Vo> catalog3List;private String id;private String name;/*** 三级分类 vo* 这里是一个内部类,记得要用public方便外部new出这个对象*/@Data@AllArgsConstructor@NoArgsConstructorpublic static class Category3Vo {/*** 父分类、二级分类 id*/private String catalog2Id;private String id;private String name;}
}
三、代码实现
1.编写Controller
//返回 json 数据@GetMapping(value = "/index/catalog.json")@ResponseBodypublic Map<String, List<Catalog2Vo>> getCatalogJson() {Map<String, List<Catalog2Vo>> catalogJson =categoryService.getCatalogJson();return catalogJson;}
2.编写Service
Map<String, List<Catalog2Vo>> getCatalogJson();@Overridepublic Map<String, List<Catalog2Vo>> getCatalogJson() {// 查询所有的分类List<CategoryEntity> selectList = this.baseMapper.selectList(null);// 所有1级分类信息List<CategoryEntity> level1Categorys = getLevel1Categorys();// 循环所有的1级分类,设置每个1级分类下面的二级分类和三级分类信息Map<String,List<Catalog2Vo>>jsonMap=level1Categorys.stream().collect(Collectors.toMap(k -> k.getId().toString(), v -> {// 初始化二级分类信息// 查询当前1级分类下的2级分类// 当前一级分类下的所有二级分类List<CategoryEntity> categories2Level =getCategoriesByParentId(selectList, v.getId());List<Catalog2Vo> catalog2Vos =categories2Level.stream().map(category2Level -> {// 设置1级分类idCatalog2Vo catalog2Vo = new Catalog2Vo(v.getId().toString(), null,category2Level.getId().toString(), category2Level.getName());
// catalog2Vos.add(catalog2Vo);// 当前二级分类下的所有三级分类List<CategoryEntity> categories3Level = getCategoriesByParentId(selectList, category2Level.getId());// 查询当前2级分类下的3级分类List<Catalog2Vo.Category3Vo>category3VoList=categories3Level.stream().map(category3Level -> {// 初始化当前二级分类下的三级分类信息Catalog2Vo.Category3Vocategory3Vo=new Catalog2Vo.Category3Vo(category2Level.getId().toString(),category3Level.getId().toString(), category3Level.getName());return category3Vo;}).collect(Collectors.toList());// 设置当前二级分类下的所有三级分类集合catalog2Vo.setCatalog3List(category3VoList);return catalog2Vo;}).collect(Collectors.toList());return catalog2Vos;}));return jsonMap;}
3、结果展示