SpringBoot查询方式全解析

文章目录

  • 一、简介
  • 二、常用注解分类
    • 1、请求映射类(处理 URL 与 HTTP 方法的绑定)
    • 2、参数绑定类(从请求中获取数据并绑定到方法参数)
    • 3、控制器与增强类(标识控制器及全局增强)
    • 4、异常与响应处理类(处理接口异常和响应状态)
    • 5、数据模型与会话类(处理模型数据和会话存储)
    • 6、其他辅助类
  • 三、查询方式写法
    • 1、路径变量
    • 2、查询变量
    • 3、实体类参数
  • 四、其它Springboot扩展参数

一、简介

在 HTTP 协议的规范中,请求方法与资源操作有着明确的对应关系:GET 和 POST 是其中用于查询请求的常见方式,而除此之外,POST、DELETE、PUT 还分别对应着资源的新增、删除和修改操作。​
其中,GET 方法的设计初衷是 “只查不改”—— 无论执行多少次,它的作用仅仅是获取服务器上的资源,不会对资源本身产生任何修改。这种特性带来了两大优势:一是可缓存性,浏览器或代理服务器可以缓存 GET 请求的结果,从而提升后续访问的效率;二是可重复执行性,多次发起相同的 GET 请求,得到的结果始终一致,也不会引发意外的副作用。这两点共同决定了 GET 方法不适合用于修改操作。​

而在 Spring Boot 框架中,GET 方法成为了获取资源的首选方式,尤其适用于查询场景、参数可公开、具备幂等性(多次操作结果一致)且需要缓存的业务需求。不过在使用时,需要特别注意两个要点:一是 URL 存在长度限制,过长的参数可能导致请求失败;二是参数的安全性,由于 GET 请求的参数会暴露在 URL 中,因此要避免传递敏感数据,更不能用它来执行修改服务器状态的操作。

二、常用注解分类

1、请求映射类(处理 URL 与 HTTP 方法的绑定)

核心是将 HTTP 请求映射到控制器方法,通过 “路径 + HTTP 方法” 定位接口。

  • 基础注解:@RequestMapping(最底层,可指定路径、请求方法、参数等)。
  • 衍生注解:@GetMapping(限定 GET 方法)、@PostMapping(POST)、@PutMapping(PUT)、@DeleteMapping(DELETE)、@PatchMapping(PATCH)。

其中衍生注解是@RequestMapping的简化版,如@GetMapping = @RequestMapping(method = RequestMethod.GET))

2、参数绑定类(从请求中获取数据并绑定到方法参数)

核心是从 HTTP 请求的不同位置(路径、查询参数、请求体等)提取数据,绑定到控制器方法的参数上。

  • 路径参数:@PathVariable(获取 URL 路径中的占位符,如/users/{id}中的id)。
  • 查询参数:@RequestParam(获取 URL 中?key=value形式的参数)。
  • 请求体:@RequestBody(获取 HTTP 请求体中的数据,通常是 JSON/XML,用于 POST/PUT 等)。
  • 请求头 / Cookie:@RequestHeader(获取请求头信息,如User-Agent)、@CookieValue(获取 Cookie 值)。
  • 特殊参数:@MatrixVariable(获取 URL 中;分隔的矩阵变量,如/books;author=鲁迅)、@RequestPart(获取multipart/form-data类型的数据,如文件上传)。
  • 域对象:@RequestAttribute(获取请求域request中的属性)、@SessionAttribute(获取会话域session中的属性)。
    共性:都用于 “从请求中拿数据”,区别仅在于数据在请求中的位置(路径、查询串、请求体等)。

3、控制器与增强类(标识控制器及全局增强)

核心是标识控制器类,或对控制器进行全局增强(如异常处理、数据预处理)。

  • 基础控制器:@RestController(= @Controller + @ResponseBody,标识 REST 接口控制器,返回值直接作为响应体)。
  • 全局增强:@ControllerAdvice(全局控制器增强,用于集中处理异常、全局数据绑定等)、@RestControllerAdvice(= @ControllerAdvice + @ResponseBody,增强 REST 接口,异常处理返回 JSON)。

4、异常与响应处理类(处理接口异常和响应状态)

核心是控制接口的异常处理和 HTTP 响应状态。

  • 异常处理:@ExceptionHandler(处理控制器方法抛出的异常,结合@ControllerAdvice实现全局异常处理)。
  • 响应状态:@ResponseStatus(指定接口或异常处理返回的 HTTP 状态码,如 404、500)。

5、数据模型与会话类(处理模型数据和会话存储)

核心是管理请求 / 会话中的数据,或绑定模型数据。

  • 模型数据:@ModelAttribute(向模型中添加数据,或绑定请求参数到模型对象)。
  • 会话存储:@SessionAttributes(指定模型中的哪些属性存入会话域,作用于类)、@SessionAttribute(从会话域中获取属性,作用于参数)。

6、其他辅助类

  • 跨域处理:@CrossOrigin(解决跨域请求问题,指定允许的来源、方法等)。
  • 数据绑定初始化:@InitBinder(自定义请求参数的绑定规则,如日期格式化、类型转换)。
  • 基础父注解:@Mapping(所有请求映射注解的父注解,定义路径映射的基本属性)。

三、查询方式写法

1、路径变量

路径:/forlan/entity/query/{param1}

单个参数写法

@GetMapping("/forlan/entity/query/{param1}")
public Result<List<ForlanVO>> queryList(@PathVariable("param1") Long param1)@GetMapping ("/forlan/entity/query/{param1}")
public Result<List<ForlanVO>> queryList(Long param1)

多个参数,必须加上@PathVariable

@GetMapping ("/forlan/entity/query/{param1}/{param2}")
public Result<List<ForlanVO>> queryList(
@PathVariable("param1") Long param1,
@PathVariable("param2") Long param2
)

2、查询变量

路径:/forlan/entity/filter?param1=xxx&param2=yyy

@GetMapping("/forlan/entity/filter")
public Result<List<ForlanVO>> filterList(Long param1, Long param2)

基础类型参数可省略 @RequestParam,如需配置默认值或必填项则需添加

@GetMapping ("/forlan/entity/filter")
public Result<List<ForlanVO>> filterList(
@RequestParam(required = false, defaultValue = "0") Integer page,
@RequestParam List<Long> ids
)

注意:集合类型参数必须添加 @RequestParam,否则会出现异常:No primary or default constructor found for interface java.util.List
原因:Spring MVC 尝试实例化接口类型(List)时无法找到合适的构造器,需通过 @RequestParam 明确指定参数绑定方式

3、实体类参数

默认接收 form-data 格式参数

@PostMapping("/forlan/entity/search")
public Result<List<ForlanVO>> searchList (ForlanDTO dto)

如需接收 JSON 格式参数,需添加 @RequestBody

@PostMapping ("/forlan/entity/search")
public Result<List<ForlanVO>> searchList(@RequestBody ForlanDTO dto)

四、其它Springboot扩展参数

@JsonAlias(“xxx”):为字段提供一个或多个反序列化时的别名,适合兼容旧字段名或不同命名风格

示例:前端传forlan或Forlan都能接收到参数

@JsonAlias("forlan")
private String Forlan;

@JsonProperty(“xxx”):定义序列化/反序列化时使用的主属性名
序列化:Java 对象 → JSON 响应/文件
反序列化:JSON 请求/文件 → Java 对象

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

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

相关文章

Linux操作系统从入门到实战(十五)详细讲解Linux调试器 gdb/cgdb使用

Linux操作系统从入门到实战&#xff08;十五&#xff09;详细讲解Linux调试器 gdb/cgdb使用前言一、gdb/cgdb是什么&#xff1f;1. 程序的两种发布模式&#xff08;debug 和 release&#xff09;二、gdb/cgdb如何启动&#xff1f;1. 准备工作2. 启动 gdb/cgdb 调试器2.1 启动 g…

基于UDP的代理协议的Tuic怎么样?

Tuic&#xff08;全称“TUIClient”&#xff09;是一款基于UDP协议的轻量代理工具&#xff0c;主打低延迟与高实时性&#xff0c;专为解决传统TCP代理在实时场景中的性能瓶颈而生。其核心设计围绕“UDP优先”展开&#xff0c;通过简化握手流程、优化加密效率&#xff0c;在保持…

缓存投毒进阶 -- justctf 2025 Busy Traffic

题目核心逻辑如下 let browser; // 全局浏览器实例// 访问指定 URL 的异步函数 const visit async (url) > {try {// 如果已有浏览器实例&#xff0c;先关闭并等待 2 秒if (browser) {await browser.close();await sleep(2000);console.log("Terminated ongoing job.&…

复刻苏宁易购(移动端)

html代码<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel"s…

Scrapy返回200但无数据?可能是Cookies或Session问题

引言 在使用Scrapy框架进行网页爬取时&#xff0c;开发者可能会遇到一个常见但令人困惑的问题&#xff1a;HTTP请求返回状态码200&#xff08;表示成功&#xff09;&#xff0c;但实际获取的数据却是空的。这种情况通常意味着目标服务器接受了请求&#xff0c;但由于某些原因没…

【gateway nc adapter虚拟网卡 win11 联想】问题的解决

前言&#xff1a;由于需要登录公司内网&#xff0c;于是启用奇安信VPN。但启动后报出网关未连接的问题&#xff0c;于是我检查了我的网络适配器&#xff0c;并尝试解决&#xff0c;以下给出几种我实践过程中的行动&#xff0c;并附带最后成功的解决方法 【gateway nc adapter虚…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的运营策略创新研究

摘要&#xff1a;在数字化商业生态快速演进的背景下&#xff0c;传统运营模式面临用户增长乏力、转化效率低下等挑战。本文以开源AI智能名片链动21模式与S2B2C商城小程序的深度融合为研究对象&#xff0c;提出通过周期化运营规划、关键节点策略设计、跨部门协同创新、数据驱动决…

smart-water表设计方案

-- -- 2. SOP 管理模块 -- -- 2.1 SOP主表 (存储SOP元数据&#xff0c;与版本分离) CREATE TABLE sops (id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),name VARCHAR(255) NOT NULL,description TEXT,latest_published_version_id UUID, -- 外键约束在版本表创建后添加crea…

A4.0:继C5.2的BJT理论引申的开关作用的应用示例

在C5里知道了BJT的静态工作点Q的计算方式&#xff08;IC和VCE的负载线&#xff09;&#xff0c;以及偏置电阻RB&#xff0c;得到了电流IB&#xff0c;进而通过电流增益hFE得到了IC(IC β*IB)&#xff0c;然后VCE VCC - IC*RC&#xff0c;即集电极和发射极之间的电压等于集电极…

平板探测器的主要技术指标

平板探测器(Flat-panel-detector,FPD)是一种广泛应用于医学影像学(如X射线、CT扫描等)、工业无损检测和科学研究中的成像设备。其主要技术指标包括以下几个方面: 1.空间分辨率(SpatialResolution) 定义:空间分辨率是指平板探测器能清晰分辨图像中细节的能力。一般以…

从苏州姑苏区人工智能大模型基础设施招标|学习参数5:单颗 AI 处理器的内存带宽如何达到 1600GB/s

招标参数5:配置≥8 个AI 处理器,支持OAM式集成服务器形式。单个 AI 处理器支持≥370TFLOPS@FP16或 80TFLOPS@FP32 算力,支持≥64GB HBM高带宽内存,单个AI处理器内存带宽≥1600GBps 单张卡算力及内存带宽参考如下NVIDIA算力表 H3C R4900 G5:支持多达 32 个 DDR4 内存,速率…

【机器学习深度学习】Embedding 模型详解:从基础原理到实际应用场景

目录 前言 一、Embedding 模型基础&#xff1a;文本到向量的“魔术师” 1.1 什么是 Embedding&#xff1f; 1.2 为什么需要 Embedding&#xff1f; 二、核心作用与优势&#xff1a;语义分析的“利刃” 三、工作原理拆解&#xff1a;从训练到应用的完整链条 3.1 训练阶段…

防御保护10

双机热备组网配置主备备份组网1、配置ip地址2、配置安全区域3、ospf配置4、配置双机热备5、安全策略hrp adjust ospf-cost enable --- 配置根据VGMP状态调整OSPF Cost值如果防火墙下行设备为三层设备&#xff0c;通过路由来引导流量&#xff0c;则需要配置上述命令&#xff1b;…

Python爬虫实战:研究meshio库,构建网格文件数据采集系统

一、引言 (一)研究背景 在有限元分析、计算流体力学(CFD)、计算机辅助设计(CAD)等领域,网格文件是描述几何模型离散化信息的基础数据载体,包含节点坐标、单元连接关系、物理属性等关键信息。目前,网格文件格式多达数十种(如 VTK、STL、OBJ、ANSYS CDB 等),且分散…

编程基础之字符串——统计数字字符个数

题目&#xff1a; 输入一行字符&#xff0c;统计出其中数字字符的个数。 输入&#xff1a; 一行字符串&#xff0c;总长度不超过255。 输出&#xff1a; 输出为1行&#xff0c;输出字符串里面数字字符的个数。 样例输入&#xff1a; Peking University is set up at 1898. 样…

Openlayers基础教程|从前端框架到GIS开发系列课程(19)地图控件和矢量图形绘制

1. 地图控件本篇教程主要介绍以下地图控件&#xff1a;视图跳转控件放大缩小控件全屏控件实现步骤1. 初始化地图上一篇已经介绍了&#xff0c;这一篇直接跳过该步骤。2. 视图跳转控件/* 视图跳转控件 */const ZoomToExtent new ol.control.ZoomToExtent({ extent: [110, 30, …

A#语言详解

A#语言详解&#xff1a;连接Ada与.NET的安全编程语言一、引言&#xff1a;A#的定义与起源A#&#xff08;A Sharp&#xff09;是一种基于.NET框架的编程语言&#xff0c;其设计目标是将Ada语言的安全性、可靠性与.NET生态系统的跨平台能力、组件化特性相结合。它由美国程序员Mic…

2025华数杯比赛还未完全结束!数模论文可以发表期刊会议

2025华数杯比赛还未完全结束&#xff01; 数模论文可以发表期刊会议数学建模论文转化为可发表的期刊/会议论文&#xff0c;可以在保持实验数据和结果不变的前提下&#xff0c;对论文结构、表述方式和学术规范进行系统性调整&#xff0c;然后进行投稿。 这不仅能让你的研究成果被…