省市区数据树形结构构建及其前端(级联选择器)展示【java+vue】

简介: 省市区数据树形结构构建及其前端(级联选择器)展示【java+vue】

省市区数据

数据形式为sql文件,数据表字段设计如下,请点击数据下载

后端

vo

由于数据需要在前端显示,为了方便使用前端组件,特意封装此vo类

import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/**
 * 存储地址项 如广东省 茂名市 电白区
 */
@Data
@AllArgsConstructor
public class AreaItemVo {
    /**
     * 存储id
     */
    private Long value;
    private String label;
    private List<AreaItemVo> children;
    public AreaItemVo(Long value, String label) {
        this.value = value;
        this.label = label;
    }
}


service

 @Override
    public List<AreaItemVo> getAreaTree() {
        声明变量
        List<AreaItemVo> areaItemVoList = new ArrayList<>();
        //查询出所有省市区数据
        List<ProvinceCityRegionEntity> provinceCityRegionEntityList = baseMapper.selectList(null);
        //过滤出所有省
        List<ProvinceCityRegionEntity> fatherList = provinceCityRegionEntityList.stream().filter(item -> {
            if (item.getParentId() == 0) {
                return true;
            } else {
                return false;
            }
        }).collect(Collectors.toList());
        for (ProvinceCityRegionEntity father : fatherList) {
            AreaItemVo areaItemVo = new AreaItemVo(father.getId(), father.getName());
            this.searchSon(areaItemVo, provinceCityRegionEntityList);
            areaItemVoList.add(areaItemVo);
        }
        return areaItemVoList;
    }
    private void searchSon(AreaItemVo father, List<ProvinceCityRegionEntity> provinceCityRegionEntityList) {
        List<AreaItemVo> sonList = provinceCityRegionEntityList.stream().filter(item -> {
            if (item.getParentId() == father.getValue().intValue()) {
                return true;
            } else {
                return false;
            }
        }).map(item1 -> {
            AreaItemVo son = new AreaItemVo(item1.getId(), item1.getName());
            //继续给儿子寻找孙子
            this.searchSon(son, provinceCityRegionEntityList);
            return son;
        }).collect(Collectors.toList());
        father.setChildren(sonList);
    }


controller

    /**
     * 获取省市区的树形结构数据
     * @return
     */
    @GetMapping("/getAreaTree")
    public R getAreaTree() {
        List<AreaItemVo> areaItemVoList = provinceCityRegionService.getAreaTree();
        return R.ok().addData("areaItemVoList", areaItemVoList);
    }


前端

使用Element UI的级联选择器来显示结果非常之贴切

   <el-form-item label="地区">
        <el-cascader v-model="province_city_area" :options="areaItemVoOptions" clearable></el-cascader>
      </el-form-item>


发请求向后端获取数据

//获取省市区的树形结构数据
    getAreaTree() {
      provinceCityRegionApi.getAreaTree().then(
        res => {
          this.areaItemVoOptions = res.areaItemVoList
        }
      )
    },

当然,直接接收后端的数据还是不行的,会出现如下问题



修正版,如果children没有元素,那就直接设置undefined即可

 //获取省市区的树形结构数据
    getAreaTree() {
      provinceCityRegionApi.getAreaTree().then(
        res => {
          this.areaItemVoOptions = res.areaItemVoList
          for (let i = 0; i < this.areaItemVoOptions.length; i++) {
            this.setNullToUndefined(this.areaItemVoOptions[i])
          }
        }
      )
    },
    //将没有子元素的父类的chidren设置为 undefined
    setNullToUndefined(areaItemVo) {
      if (areaItemVo.children.length < 1) {
        areaItemVo.children = undefined;
      } else {
        for (let i = 0; i < areaItemVo.children.length; i++) {
          this.setNullToUndefined(areaItemVo.children[i])
        }
      }
    }

效果展示


目录
相关文章
|
7天前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
135 1
|
24天前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
124 3
|
2月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
2月前
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
2月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
11天前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
141 12
|
10天前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
272 1
|
17天前
|
安全 Java API
使用 Java 构建强大的 REST API 的四个基本技巧
本文结合探险领域案例,分享Java构建REST API的四大核心策略:统一资源命名、版本控制与自动化文档、安全防护及标准化异常处理,助力开发者打造易用、可维护、安全可靠的稳健API服务。
98 2
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
84 16
|
3月前
|
消息中间件 监控 Java
借助最新技术构建 Java 邮件发送功能的详细流程与核心要点分享 Java 邮件发送功能
本文介绍了如何使用Spring Boot 3、Jakarta Mail、MailHog及响应式编程技术构建高效的Java邮件发送系统,涵盖环境搭建、异步发送、模板渲染、测试与生产配置,以及性能优化方案,助你实现现代化邮件功能。
146 0