谷粒 | 13 | 课程分类后台接口

课程分类后端接口开发

准备

课程分类树形结构

Json数据格式

   data: [
       {
        id: 1,
        label: 'Level one 1',
        children: [
            {
              id: 4,
              label: 'Level two 1-1',
     		}
        ]
      },
   ]

现在要从后台接口获取课程分类数据并拼接成以上数据格式

如何在后台将数据拼接成想要的格式

一、根据格式定义实体类

以本次课程分类Json数据格式为例,有一级分类课程和二级分类课程

//一级分类课程
@Data
public class FirstLevelSubject {
    private String id;
    private String title;
    private List<SecondLevelSubject> secSubList = new ArrayList<>();
}

//二级分类课程
@Data
public class SecondLevelSubject {
    private String id;
    private String title;
}

二、控制层和业务层接口

  @GetMapping("getAllSubjects")
    @ApiOperation("获取所有分级课程")
    public Result getAllSubjects(){
        List<FirstLevelSubject> list = subjectService.getFirstAndSecondSubjects();
        return Result.ok().data("list",list);
    }
List<FirstLevelSubject> getFirstAndSecondSubjects();

三、实现类具体业务

 @Override
    public List<FirstLevelSubject> getFirstAndSecondSubjects() {
        //1、获取所有一级分类课程
        QueryWrapper<EduSubject> wrapperFirst = new QueryWrapper<>();
            //eq:等于
        wrapperFirst.eq("parent_id", "0");
        List<EduSubject> firstSubjectList = baseMapper.selectList(wrapperFirst);

        //2、查询所有二级分类课程
        QueryWrapper<EduSubject> wrapperSec = new QueryWrapper<>();
            //ne:不等于
        wrapperSec.ne("parent_id", "0");
        List<EduSubject> secSubjectList = baseMapper.selectList(wrapperSec);

            //创建list集合,用于存储最终封装数据
        List<FirstLevelSubject> finalSubjectList = new ArrayList<>();

    /*
       3、封装一级分类课程为FirstLevelSubject类型
       将查询到的类型为EduSubject的课程信息复制共有属性到FirstLevelSubject
     */
        for (int i = 0; i < firstSubjectList.size() ; i++) {
            //获取每个EduSubject类型的一级分类并封装成FirstLevelSubject类型
            EduSubject firstEduSubject = firstSubjectList.get(i);
            //复制共有属性
            FirstLevelSubject firstSubject = new FirstLevelSubject();
            BeanUtils.copyProperties(firstEduSubject,firstSubject);


       //4、复制共有属性封装为SecondLevelSubject类型,并放入一级分类课程中
            //创建list集合封装二级分类
            List<SecondLevelSubject> secFinalSubjectList = new ArrayList<>();
            //遍历EduSubject类型的二级分类并封装成SecondLevelSubject类型
            for (int j = 0; j < secSubjectList.size() ; j++) {
                EduSubject secEduSubject = secSubjectList.get(j);
                //判断二级分类parentid和一级分类id是否一样
                if (secEduSubject.getParentId().equals(firstEduSubject.getId())) {
                    //新建SecondLevelSubject类型对象存放复制过来的二级分类课程信息
                    SecondLevelSubject secSubject = new SecondLevelSubject();
                    BeanUtils.copyProperties(secEduSubject,secSubject);
                    secFinalSubjectList.add(secSubject);
                }

            }

        //5、将封装好的二级分类课程集合存入对应的一级分类课程中
            firstSubject.setSecSubList(secFinalSubjectList);

        //6、将封装好的一级课程结果存入最终结果集
            finalSubjectList.add(firstSubject);
        }

        return finalSubjectList;
    }
posted @ 2021-02-11 10:16  至安  阅读(114)  评论(0编辑  收藏  举报