您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java接口返回省市區樹形結構如何實現”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“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相關的代碼
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接口返回省市區樹形結構如何實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。