谷粒 | 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;
}