【SpringBoot + Vue 尚庭公寓实战】地区信息管理接口实现(九)

news2025/2/26 4:42:52

【SpringBoot + Vue 尚庭公寓实战】地区信息管理接口实现(九)


文章目录

      • 【SpringBoot + Vue 尚庭公寓实战】地区信息管理接口实现(九)
        • 1、业务说明
        • 2、数据逻辑模型
        • 3、接口实现
          • 3.1、查询省份信息列表
          • 3.2、根据省份ID查询城市信息列表
          • 3.3、根据城市ID查询区县信息列表

1、业务说明

地区信息管理共有三个接口,分别是

  1. 查询省份信息列表
  2. 根据省份ID查询城市信息列表
  3. 根据城市ID查询区县信息列表

接口定义-后台-公寓管理-公寓列表

2、数据逻辑模型

1

  • 省份信息表(Province):存储省份的基本信息。
    • 省份ID(Primary Key)
    • 省份名称
  • 城市信息表(City):存储城市的基本信息,并且包含一个外键指向省份信息表。
    • 城市ID(Primary Key)
    • 城市名称
    • 所属省份ID(Foreign Key,关联到省份信息表的省份ID
  • 区县信息表(County):存储区县的基本信息,并且包含一个外键指向城市信息表。
    • 区县ID(Primary Key)
    • 区县名称
    • 所属城市ID(Foreign Key,关联到城市信息表的城市ID
3、接口实现
3.1、查询省份信息列表

查看接口

Snipaste_2024-06-13_23-12-40

接口信息:

  • 请求地址: /admin/region/province/list
  • 请求类型: GET
  • 请求内容类型: application/x-www-form-urlencoded

请求参数:

此接口不需要请求参数。

响应状态:

状态码说明
200OK

响应参数:

参数名称数据类型说明
codeinteger(int32)返回码
messagestring返回信息
dataarray省份信息列表

data 数组中的对象结构:

参数名称数据类型说明
idinteger(int64)省份ID
namestring省份名称

响应示例:

{
  "code": 200,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "name": "省份1"
    },
    {
      "id": 2,
      "name": "省份2"
    }
    // 更多省份信息
  ]
}

代码实现

// 标记该类为地区信息管理的控制器
@Tag(name = "地区信息管理")
@RestController
@RequestMapping("/admin/region")
public class RegionInfoController {

    // 自动注入省份信息服务
    @Autowired
    private ProvinceInfoService provinceInfoService;

    // 定义一个接口来查询省份信息列表
    @Operation(summary = "查询省份信息列表")
    @GetMapping("province/list")
    public Result<List<ProvinceInfo>> listProvince() {
        // 从服务层获取省份信息列表
        List<ProvinceInfo> list = provinceInfoService.list();
        // 返回封装好的结果
        return Result.ok(list);
    }
}
3.2、根据省份ID查询城市信息列表

查看接口

Snipaste_2024-06-13_23-19-18

接口信息:

  • 请求地址: /admin/region/city/listByProvinceId
  • 请求类型: GET
  • 请求内容类型: application/x-www-form-urlencoded

请求参数:

参数名称参数位置是否必须数据类型参数说明
idquerytrueinteger(int64)省份ID

响应状态:

状态码说明
200OK

响应参数:

参数名称数据类型参数说明
codeinteger(int32)返回码
messagestring返回信息
dataarray城市信息列表

data 数组中的对象结构:

参数名称数据类型说明
idinteger(int64)主键
namestring城市名称
provinceIdinteger(int32)所属省份ID

响应示例:

{
  "code": 200,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "name": "城市1",
      "provinceId": 1
    },
    {
      "id": 2,
      "name": "城市2",
      "provinceId": 1
    }
    // 更多城市信息
  ]
}
  • 请求地址:此接口的请求地址是 /admin/region/city/listByProvinceId,用于根据省份 ID 查询城市信息列表。
  • 请求类型GET 表示这是一个 GET 请求。
  • 请求内容类型application/x-www-form-urlencoded 表示请求数据需要以 URL 编码格式发送。
  • 请求参数
    • id:省份 ID,必须提供,用于指定要查询的省份。
  • 响应状态:200 表示请求成功。
  • 响应参数
    • code:返回码,整数类型,表示请求的状态。
    • message:返回信息,字符串类型,描述请求的结果。
    • data:数组类型,包含城市信息的列表。
      • id:城市 ID,整数类型。
      • name:城市名称,字符串类型。
      • provinceId:所属省份 ID,整数类型。

代码实现

@Tag(name = "地区信息管理")
@RestController
@RequestMapping("/admin/region")
public class RegionInfoController {

    @Autowired
    private ProvinceInfoService provinceInfoService;
    @Autowired
    private CityInfoService cityInfoService;

    @Operation(summary = "查询省份信息列表")
    @GetMapping("province/list")
    public Result<List<ProvinceInfo>> listProvince() {
        List<ProvinceInfo> list = provinceInfoService.list();
        return Result.ok(list);
    }

    @Operation(summary = "根据省份id查询城市信息列表")
    @GetMapping("city/listByProvinceId")
    public Result<List<CityInfo>> listCityInfoByProvinceId(@RequestParam Long id) {
        LambdaQueryWrapper<CityInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(CityInfo::getProvinceId,id);
        List<CityInfo> list = cityInfoService.list(queryWrapper);
        return Result.ok(list);
    }

}

通过这个接口,可以向服务器发送请求,获取指定省份的所有城市信息列表。前端可以根据这个接口返回的数据来展示城市信息,并实现省市县三级联动的第二级选择。

3.3、根据城市ID查询区县信息列表

查看接口

Snipaste_2024-06-13_23-24-43

接口信息:

  • 请求地址: /admin/region/district/listByCityId
  • 请求类型: GET
  • 请求内容类型: application/x-www-form-urlencoded

请求参数:

参数名称参数位置是否必须数据类型参数说明
idquerytrueinteger(int64)城市ID

响应状态:

状态码说明
200OK

响应参数:

参数名称数据类型参数说明
codeinteger(int32)返回码
messagestring返回信息
dataarray区县信息列表

data 数组中的对象结构:

参数名称数据类型说明
idinteger(int64)主键
namestring区县名称
cityIdinteger(int32)所属城市ID

响应示例:

{
  "code": 200,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "name": "区县1",
      "cityId": 1
    },
    {
      "id": 2,
      "name": "区县2",
      "cityId": 1
    }
    // 更多区县信息
  ]
}

解释:

  • 请求地址:此接口的请求地址是 /admin/region/district/listByCityId,用于根据城市 ID 查询区县信息列表。
  • 请求类型GET 表示这是一个 GET 请求。
  • 请求内容类型application/x-www-form-urlencoded 表示请求数据需要以 URL 编码格式发送。
  • 请求参数
    • id:城市 ID,必须提供,用于指定要查询的城市。
  • 响应状态:200 表示请求成功。
  • 响应参数
    • code:返回码,整数类型,表示请求的状态。
    • message:返回信息,字符串类型,描述请求的结果。
    • data:数组类型,包含区县信息的列表。
      • id:区县 ID,整数类型。
      • name:区县名称,字符串类型。
      • cityId:所属城市 ID,整数类型。

通过这个接口,可以向服务器发送请求,获取指定城市的所有区县信息列表。前端可以根据这个接口返回的数据来展示区县信息,并实现省市县三级联动的第三级选择。

代码实现

@Tag(name = "地区信息管理")
@RestController
@RequestMapping("/admin/region")
public class RegionInfoController {

    @Autowired
    private ProvinceInfoService provinceInfoService;
    @Autowired
    private CityInfoService cityInfoService;
    @Autowired
    private DistrictInfoService districtInfoService;

    @Operation(summary = "查询省份信息列表")
    @GetMapping("province/list")
    public Result<List<ProvinceInfo>> listProvince() {
        List<ProvinceInfo> list = provinceInfoService.list();
        return Result.ok(list);
    }

    @Operation(summary = "根据省份id查询城市信息列表")
    @GetMapping("city/listByProvinceId")
    public Result<List<CityInfo>> listCityInfoByProvinceId(@RequestParam Long id) {
        LambdaQueryWrapper<CityInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(CityInfo::getProvinceId,id);
        List<CityInfo> list = cityInfoService.list(queryWrapper);
        return Result.ok(list);
    }

    @GetMapping("district/listByCityId")
    @Operation(summary = "根据城市id查询区县信息")
    public Result<List<DistrictInfo>> listDistrictInfoByCityId(@RequestParam Long id) {
        LambdaQueryWrapper<DistrictInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(DistrictInfo::getCityId,id);
        List<DistrictInfo> list = districtInfoService.list(queryWrapper);
        return Result.ok(list);
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1823804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python对象序列化库之dill使用详解

概要 在 Python 编程中,序列化(Serialization)和反序列化(Deserialization)是处理对象持久化和数据传输的常见任务。Python 提供了内置的 pickle 模块用于对象序列化,但它在处理复杂对象(如带有 lambda 函数、生成器和闭包的对象)时存在一定局限性。dill 库是 pickle …

本地运行大语言模型(LLMs)

用例 像PrivateGPT、llama.cpp、Ollama、GPT4All、llamafile 等项目的流行度凸显了本地&#xff08;在您自己的设备上&#xff09;运行大型语言模型&#xff08;LLMs&#xff09;的需求。 这至少有两个重要的好处&#xff1a; 1.隐私&#xff1a;您的数据不会发送给第三方&a…

【Java面试】十八、并发篇(中)

文章目录 1、什么是AQS2、ReentrantLock的实现原理2.1 原理2.2 其他补充点 3、synchronized和Lock有什么区别3.1 区别3.2 Demo代码3.3 signal方法的底层实现 4、死锁的产生与排查4.1 死锁产生的条件是什么4.2 死锁的排查 1、什么是AQS AQS&#xff0c;抽象队列同步器&#xff…

汇编:内联汇编和混合编程

C/C内联汇编 C/C 内联汇编&#xff08;Inline Assembly&#xff09;是一种在C或C代码中嵌入汇编语言指令的方法&#xff0c;以便在不离开C/C环境的情况下利用汇编语言的优势进行性能优化或执行特定的硬件操作。以下是一些详细的说明和示例&#xff0c;展示如何在C和C代码中使用…

springboot集成swagger、knife4j

1. 集成swagger2 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</vers…

Redis和Docker

Redis 和 Docker 是两种不同的技术&#xff0c;它们各自解决不同的问题&#xff0c;但有时会一起使用以提供更高效和灵活的解决方案。 Redis 是一个开源的内存数据结构存储系统&#xff0c;可以用作数据库、缓存和消息代理。它设计为解决MySQL等关系型数据库在处理大量读写访问…

Python 植物大战僵尸游戏【含Python源码 MX_012期】

简介&#xff1a; "植物大战僵尸"&#xff08;Plants vs. Zombies&#xff09;是一款由PopCap Games开发的流行塔防游戏&#xff0c;最初于2009年发布。游戏的概念是在僵尸入侵的情境下&#xff0c;玩家通过种植不同种类的植物来保护他们的房屋免受僵尸的侵袭。在游…

重生之 SpringBoot3 入门保姆级学习(19、场景整合 CentOS7 Docker 的安装)

重生之 SpringBoot3 入门保姆级学习&#xff08;19、场景整合 CentOS7 Docker 的安装&#xff09; 6、场景整合6.1 Docker 6、场景整合 6.1 Docker 官网 https://docs.docker.com/查看自己的 CentOS配置 cat /etc/os-releaseStep 1: 安装必要的一些系统工具 sudo yum insta…

react 0至1 案例

/*** 导航 Tab 的渲染和操作** 1. 渲染导航 Tab 和高亮* 2. 评论列表排序* 最热 > 喜欢数量降序* 最新 > 创建时间降序* 1.点击记录当前type* 2.通过记录type和当前list中的type 匹配*/ import ./App.scss import avatar from ./images/bozai.png import {useState} …

零基础开始学习鸿蒙开发-@State的使用以及定义

1.State组件介绍 首先定义 State为鸿蒙开发的一个状态组件&#xff0c;当它修饰的组件发生改变时&#xff0c;UI也会相应的刷新&#xff0c;简单介绍就是这样&#xff0c;下面我们用代码去体会一下。 2.定义DeliverParam类 首先定义一个模型类&#xff0c;类里面定义一个构造…

Linux系统使用Docker安装Dashy导航页结合内网穿透一键发布公网

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

nc网络收发测试-tcp客户端\TCP服务器\UDP\UDP广播

netcat&#xff08;nc&#xff09;&#xff1a; 作用&#xff1a;一个功能强大的网络工具&#xff0c;提供了简单的网络测试和网络编程功能。工作原理&#xff1a;可以用于建立TCP或UDP连接&#xff0c;并发送和接收数据。示例用法&#xff1a; 监听TCP端口&#xff1a;nc -l 1…

Python魔法方法__call__深入详解

目录 1、魔法方法__call__初探 🧙‍♂️ 1.1 什么是__call__? 1.2 基础用法演示 1.3 自定义行为与参数传递 2、实现轻量级装饰器模式 🎗️ 2.1 装饰器概念回顾 2.2 利用__call__构建装饰器 2.3 深入理解装饰器应用场景 3、类实例变身函数调用 🔮 3.1 类似函数的…

【RAG】RAG性能提升之路-RAPTOR:一种构建递归文档树的增强检索方法

背景 检索增强型语言模型&#xff08;RALMs&#xff09;在处理需要不断更新的知识和大量信息的文档时确实展现出了优势。然而&#xff0c;现有的方法在处理长篇文档时存在局限性&#xff0c;主要是因为它们通常只能检索较短的文本片段&#xff0c;这限制了对整体文档上下文的全…

蓝牙资讯|苹果iOS 18增加对AirPods Pro 2自适应音频的更多控制

苹果 iOS 18 系统将为 AirPods Pro 2 用户带来一项实用功能 —— 更精细的“自适应音频”控制。AirPods Pro 2 的“自适应音频”功能包含自适应降噪、个性化音量和对话增强等特性&#xff0c;可以根据周围环境自动调节声音和降噪效果。 当更新至最新测试版固件的 AirPods Pro 2…

24年法考报名照片千万别乱拍,否则卡审

法考报名照片每年都有很多被卡审&#x1f62d; 常见的问题是 ①照片比例不对&#xff0c;无法上传&#xff0c;人像比例要求非常严格 ②照片像素错误&#xff0c;不能直接拿大图压缩图片&#xff0c;需要做出413*626像素的法考证件照 ③照片文件偏大&#xff0c;照片要求40-100…

【LeetCode刷题】前缀和解决问题:560.和为k的子数组

【LeetCode刷题】Day 16 题目1&#xff1a;560.和为k的子数组思路分析&#xff1a;思路1&#xff1a;前缀和 哈希表 题目1&#xff1a;560.和为k的子数组 思路分析&#xff1a; 问题1&#xff1a;怎样找到数组所有子数组&#xff1f; 方式一&#xff1a;暴力枚举出来&#x…

CSS实现经典打字小游戏《生死时速》

&#x1f33b; 前言 CSS 中有这样一个模块&#xff1a;Motion Path 运动模块&#xff0c;它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用&#xff0c;并且利用它实现我小时候电脑课经常玩的一个打字游戏&#xff1a;金山打字的《生死时速》。 &…

Kettle 传参(参数)的使用

Kettle 传参的符号是 ? 。 一、给表改名&#xff0c;并在名称后面加上日期 1、表输入获取名称参数 我这是通过SQL来获取 SELECT concat("score","_",DATE_FORMAT(sysdate(),%Y%m%d%H%i)) aa FROM dual2、执行SQL语句 使用SQL脚本组件 想要获得参数&a…

win10 3389,win10操作系统如何修改3389端口

在Windows 10操作系统中&#xff0c;3389端口是远程桌面服务&#xff08;Remote Desktop Protocol, RDP&#xff09;的默认侦听端口。出于安全考虑&#xff0c;许多用户和管理员会选择修改这个默认端口号&#xff0c;以减少潜在的攻击面。下面将详细介绍如何修改Windows 10中的…