Java接口返回省市区树形结构的实现
前言
最近和前端联调接口,需要进行一个省市区联动,最终定的方案是通过接口返回一个树形结构给前端,类似这样的结构:
下面就把相关表和代码分享给大家
设计表结构
表结构已经准备好了,直接执行即可。
由于数据量较大,这里放不下,需要的伙伴们可以私聊我
CREATE TABLE `sys_region` ( `id` int(19) NOT NULL AUTO_INCREMENT COMMENT 'id', `pid` int(19) NULL DEFAULT NULL COMMENT '上级ID,一级为0', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `tree_level` int(3) NULL DEFAULT NULL COMMENT '层级', `leaf` int(3) NULL DEFAULT NULL COMMENT '是否叶子节点 0:否 1:是', `sort` int(19) NULL DEFAULT NULL COMMENT '排序', `create_by` varchar(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `update_by` varchar(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新者', `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 820202 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '行政区域' ROW_FORMAT = Dynamic;
Java代码
下面分享Java相关的代码
entity
实体就是这个表的属性,这里最后一个属性childList就是用来存放子列表的,可以先建一个VO,我直接写在实体里面了。
package org.jeecg.modules.entity; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; import java.util.List; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * @Description: 行政区域实体 * @Author:wyh * @Date: 2021-04-06 */ @Data @TableName("sys_region") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @ApiModel(value = "sys_region对象", description = "行政区域") public class SysRegion implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "id") private Integer id; /** * 上级ID,一级为0 */ @Excel(name = "上级ID,一级为0", width = 15) @ApiModelProperty(value = "上级ID,一级为0") private Integer pid; /** * 名称 */ @Excel(name = "名称", width = 15) @ApiModelProperty(value = "名称") private String name; /** * 层级 */ @Excel(name = "层级", width = 15) @ApiModelProperty(value = "层级") private Integer treeLevel; /** * 是否叶子节点 0:否 1:是 */ @Excel(name = "是否叶子节点 0:否 1:是", width = 15) @ApiModelProperty(value = "是否叶子节点 0:否 1:是") private Integer leaf; /** * 排序 */ @Excel(name = "排序", width = 15) @ApiModelProperty(value = "排序") private Integer sort; /** * 创建者 */ @ApiModelProperty(value = "创建者") private String createBy; /** * 创建时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "创建时间") private Date createTime; /** * 更新者 */ @ApiModelProperty(value = "更新者") private String updateBy; /** * 更新时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "更新时间") private Date updateTime; /** * 子列表 */ @TableField(exist = false) //表示这个属性不属于表中的字段 private List<SysRegion> childList; }
service
/** * @Author wyh * @Description 查询所有省级区域以树形式展示关系 * @Date 10:00 2022/12/27 **/ List<SysRegion> queryAllProvinceTree();
serviceImpl
@Override public List<SysRegion> queryAllProvinceTree() { // 获取全部区域 List<SysRegion> list = this.query().list(); // 省区域 List<SysRegion> provinceListOneLevelRegion = list.stream().filter(item -> item.getPid().intValue()==0).collect(Collectors.toList()); //遍历一级地区 provinceListOneLevelRegion.stream().forEach(oneItem -> { //获得二级 List<SysRegion> twoLevelRegion = list.stream().filter(twoItem -> twoItem.getPid().intValue() == oneItem.getId().intValue()) .collect(Collectors.toList()); //遍历二级 twoLevelRegion.stream().forEach(twoItem -> { //获得三级 List<SysRegion> threeLevelRegion = list.stream().filter(threeItem -> threeItem.getPid().intValue() == twoItem.getId().intValue()) .collect(Collectors.toList()); twoItem.setChildList(threeLevelRegion); }); oneItem.setChildList(twoLevelRegion); } ); // 最终的树形结构列表 return provinceListOneLevelRegion; }
controller
/** * 查询所有省级区域以树形式展示关系 * * @return */ @ApiOperation(value = "行政区域-查询所有省级区域以树形式展示关系", notes = "行政区域-查询所有省级区域以树形式展示关系") @GetMapping(value = "/queryAllProvinceTree") public Result<?> queryAllProvinceTree() { return Result.OK(SysRegionService.queryAllProvinceTree()); }
调用接口查看结果
以上代码写完之后,就可以调用接口了,返回格式如下:
到此这篇关于Java接口返回省市区树形结构的实现的文章就介绍到这了,更多相关Java 返回树形结构内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/weixin_46713508/article/details/128463
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-02
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31SQLMAP结合Meterpreter实现注入渗透返回shell
sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
- 这篇文章主要介绍了Java线程池中的各个参数如何合理设置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-19
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07