springboot 返回多层级关系为json格式给前端(树形层级数据)

编程入门 行业动态 更新时间:2024-10-26 23:27:11

springboot 返回多<a href=https://www.elefans.com/category/jswz/34/1768876.html style=层级关系为json格式给前端(树形层级数据)"/>

springboot 返回多层级关系为json格式给前端(树形层级数据)

后台表是一个类似菜单表,存在自关联的父子关系. 现在想把表数据加工成分级之后的json数据返回给前端.供展示 

 

1:实体

/*** <p>* 课程科目* </p>** @author zxz* @since 2023-03-14*/
@TableName("edu_subject")
@JsonInclude(JsonInclude.Include.NON_NULL)  //springboo空字段不做json显示
@ApiModel(value = "EduSubject对象", description = "课程科目")
@Data
@ToString
public class EduSubject implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty("课程类别ID")private String id;@ApiModelProperty("类别名称")private String title;@ApiModelProperty("父ID")private String parentId;@ApiModelProperty("排序字段")private Integer sort;@ApiModelProperty("创建时间")private Date gmtCreate;@ApiModelProperty("更新时间")private Date gmtModified;@TableField(exist=false) //排除字段关系private ArrayList<EduSubject> List;
}

2:Controller

@Controller
@RequestMapping("/eduSubject")
@CrossOrigin
public class EduSubjectController {@Autowiredprivate IEduSubjectService iEduSubjectService;@GetMapping("getSubject")@ResponseBodypublic ResultMessge getSubject(){return iEduSubjectService.getSubject();}
}

3:Service


/*** <p>* 课程科目 服务实现类* </p>** @author zxz* @since 2023-03-14*/
@Service
public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements IEduSubjectService {public ResultMessge getSubject (){//所有学科列表 mybatisplus提供的listList<EduSubject> list = list();//将学科按照父id分类, 放在 <父id,<对应子集合>>的map中HashMap<String,ArrayList<EduSubject>> hashMap = new HashMap<>();list.stream().forEach(a -> {hashMapputeIfAbsent(a.getParentId(), key -> new ArrayList<EduSubject>()).add(a);});//从父节点进入开始递归往下找listToJson(hashMap,"0");//递归完成之后,将父节点的List返回就行了return ResultMessge.success().addMap("json",hashMap.get("0"));}/**** @param hashMap 源map* @param level levelid*/public void listToJson(HashMap<String,ArrayList<EduSubject>> hashMap,  String level){//获得level等级的子集合ArrayList<EduSubject> list = hashMap.get(level);list.stream().forEach(e -> {ArrayList<EduSubject> eduSubjectlist = hashMap.get(e.getId()); //获得level层级的孙集合e.setList(eduSubjectlist); //子集合设置到父if(eduSubjectlist!=null&&eduSubjectlist.size()!=0){eduSubjectlist.stream().forEach(es -> {   //子集合在去找孙集合然后递归listToJson(hashMap,es.getParentId());});}});}
}

4:表数据

 别的都是2个层级, 新增了一条记录是第3个层级. 前端开发--html/css--测试

 5:ResultMessge

package com.zxz.entiry;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;/*** @auther nnzxz* @create 2023-03-12* @used do something*/
@Data
public class ResultMessge {final static int SUCESSCODE=20000 ;final static int DEFEATCODE=20001 ;public Boolean flag;public int code;private String message;private Map<String,Object> data;public ResultMessge addMap(String key,Object value){if(this.data==null){this.data=new HashMap<>();}this.data.put(key,value);return this;}public ResultMessge() {}public ResultMessge(Boolean flag, int code, String message, Map<String,Object>  items) {this.flag = flag;this.code = code;this.message = message;this.data = items;}public static ResultMessge success(){return new ResultMessge(true,SUCESSCODE,"成功",null);}public static ResultMessge defeat(){return new ResultMessge(false,DEFEATCODE,"失败",null);}
}

6: 效果

更多推荐

springboot 返回多层级关系为json格式给前端(树形层级数据)

本文发布于:2024-03-05 20:32:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713337.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:层级   多层   关系   格式   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!