Spring Boot 中 Controller 接口参数注解全攻略与实战案例详解

引言

在 Spring Boot 应用程序中,Controller 是 MVC 架构模式中的核心组件之一,负责处理 HTTP 请求并返回响应结果。为了更好地映射请求、解析请求参数、执行业务逻辑和生成视图或 JSON 数据,Controller 中广泛使用了各种注解。本文将全面梳理 Spring Boot 中 Controller 接口所使用的各类注解及其具体使用案例。

一、Controller 类级别的注解

1. 控制器类注解

@Controller

import org.springframework.stereotype.Controller;@Controller
public class MyController {// ...
}

用途:标记一个类作为Spring MVC的控制器,此类中包含的方法将被映射为HTTP请求处理器。

2. RESTful控制器注解

@RestController
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyRestController {// ...
}

用途:@RestController是一个组合注解,它同时包含了@Controller和@ResponseBody,意味着该控制器的所有方法都将直接返回JSON、XML或者其他类型的数据而不是视图名。

二、路径映射注解

@RequestMapping

@RequestMapping
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/api/v1")
public class MyApiV1Controller {@RequestMapping("/users")public ResponseEntity<List<User>> getAllUsers() {// ...}
}

用途:它可以放在类或方法上,用于指定控制器类或者方法处理的请求的基本URL路径。

三、 方法级别的路径映射注解

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping

import org.springframework.web.bind.annotation.*;@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {// ...
}@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {// ...
}@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User updatedUser) {// ...
}@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {// ...
}

用途:这些注解分别对应HTTP的GET、POST、PUT和DELETE方法,用于精确映射HTTP请求到相应的方法。

四、 方法参数注解

@PathVariable

@GetMapping("/users/{userId}/details")
public UserDetails getUserDetails(@PathVariable("userId") Long userId) {// ...
}

用途:从URL模板变量中提取值,并将其绑定到方法参数。

@RequestParam

@GetMapping("/search")
public List<User> searchUsers(@RequestParam(name = "name", required = false) String name,@RequestParam(defaultValue = "10") int limit) {// ...
}

用途:从请求的查询参数中获取值。

@RequestBody

@PostMapping("/users")
public User createUser(@RequestBody User newUser) {// ...
}

用途:将整个HTTP请求体转换成Java对象。

@RequestHeader

@GetMapping("/headers")
public String getHeaderValue(@RequestHeader("Authorization") String authHeader) {// ...
}

用途:从请求头中提取指定名称的值。

@CookieValue

@GetMapping("/cookies")
public String getCookie(@CookieValue(value = "JSESSIONID", defaultValue = "") String sessionId) {// ...
}

用途:从请求的cookie中提取指定名称的值。

@ModelAttribute

@ModelAttribute("userForm")
public UserForm setUpUserForm() {return new UserForm();
}@PostMapping("/register")
public String register(@ModelAttribute("userForm") UserForm userForm) {// ...
}

作用:用于将请求参数自动绑定到模型属性对象,或者在方法体内填充模型属性。

五、其他增强型注解

@ModelAttribute 用于方法参数时,它可以从模型中查找已有的属性,或者通过调用方法来创建新的属性。

@Valid 结合 JSR-303/JSR-349 Bean Validation 使用,对方法参数进行数据校验。

@PostMapping("/register")
public String register(@Valid @ModelAttribute("userForm") UserForm userForm, BindingResult bindingResult) {if (bindingResult.hasErrors()) {// ...}// ...
}

六、全局异常处理和日志记录

@ControllerAdvice: 用于创建全局异常处理器,处理所有Controller中抛出的异常。

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(UserNotFoundException.class)public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {// ...}
}

通过以上示例,我们展示了Spring Boot中Controller接口常见的注解及其实际应用场景。根据具体需求,开发者可以选择合适的注解以构建功能完备且健壮的RESTful API。

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

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

相关文章

温湿度传感器(DHT11)以及光照强度传感器(BH1750)的使用

前言 对于一些单片机类的环境检测或者智能家居小项目中&#xff0c;温湿度传感器&#xff08;DHT11&#xff09;以及光照强度传感器&#xff08;BH1750&#xff09;往往是必不可少的两个外设&#xff0c;下面我们来剖析这两个外设的原理&#xff0c;以及使用。 1. 温湿度传感…

嵌入式4-18

做一个简单数据库终端操作系统 #include <myhead.h> int main(int argc, const char *argv[]) {int id;char name[16];float score;sqlite3 *pNULL;if(sqlite3_open("./my.db",&p)!SQLITE_OK){printf("sqlite3_open error\n");return -1;} …

python中中英文打印对齐解决方案

在python中&#xff0c;有时候会出现中英文混合输出的情形&#xff0c;但是由于中文默认是全角格式&#xff08;一个中文字符占用两个字符宽度&#xff09;&#xff0c;这会对python原生的print函数带来一些障碍。尤其是用户用print对齐输出的时候&#xff0c;这种差异会导致文…

顺序表链表经典算法题

1.链表反转 typedef struct ListNode listnode; struct ListNode* reverseList(struct ListNode* head) {if(head NULL){return head;}listnode* p1 NULL;listnode* p2 head;listnode* p3 head->next;while(p2){p2->next p1;p1 p2;p2 p3;if(p3)p3 p3->next;}…

ASP.NET MVC企业级程序设计 (商品管理:小计,总计,删除,排序)

目录 效果图 实现过程 1创建数据库 2创建项目文件 3创建控制器&#xff0c;右键添加&#xff0c;控制器 ​编辑 注意这里要写Home​编辑 创建成功 数据模型创建过程之前作品有具体过程​编辑 4创建DAL 5创建BLL 6创建视图&#xff0c;右键添加视图 ​编辑 7HomeCont…

ST-GCN模型详解(+openpose)

ST-GCN模型详解&#xff08;openpose&#xff09; 一、什么是ST-GCN呢 基于骨架的动作识别&#xff08;Skeleton-Based Action Recognition&#xff09;主要任务是从一系列时间连续的骨骼关键点&#xff08;2D/3D&#xff09;中识别出正在执行的动作。因为牵涉到骨骼框架这种…

智慧公厕解决方案易集成好使用的智能硬件

在现代城市建设中&#xff0c;智慧公厕的需求日益增长。为了提供更好的用户体验和更高效的管理&#xff0c;易集成、好使用的智能硬件成为智慧公厕解决方案的关键组成部分。 1. 蹲位有人无人感应器&#xff1a;是用于检测厕位有人无人的设备&#xff0c;根据现场不同的安装条件…

Flask前端页面文本框展示后端变量,路由函数内外两类

一、外&#xff01;路由函数外的前后端数据传输 Flask后端 ↓ 首先导入包&#xff0c;需要使用 后端&#xff1a;flask_socketio来进行路由外的数据传输&#xff0c; from flask_socketio import SocketIO, emit 前端&#xff1a;还有HTML头文件的设置。 <!DOCTYPE …

DevOps是什么?

DevOps是一系列实践、工具和文化理念的组合&#xff0c;旨在自动化并整合软件开发和信息技术运维团队之间的流程。以下是DevOps的几个关键点&#xff1a; 沟通与协作&#xff1a;DevOps强调开发和运维团队之间的沟通与合作&#xff0c;通过改善这两个部门间的协作关系&#xff…

使用clickhouse-backup备份和恢复数据

作者&#xff1a;俊达 介绍 clickhouse-backup是altinity提供的一个clickhouse数据库备份和恢复的工具&#xff0c;开源项目地址&#xff1a;https://github.com/Altinity/clickhouse-backup 功能上能满足日常数据库备份恢复的需求&#xff1a; 支持单表/全库备份支持备份上…

电脑桌面便签软件哪个好?好用的电脑桌面便签

电脑作为我们日常工作的重要工具&#xff0c;承载着大量的任务和项目。当工作任务繁重时&#xff0c;如何在电脑桌面上高效管理这些任务就显得尤为重要。这时&#xff0c;选择一款优秀的桌面便签软件&#xff0c;无疑会给我们带来极大的便利。 一款好的桌面便签软件&#xff0…

JDK11安装教程

文章目录 1、安装2、配置环境变量 1、安装 双击安装包&#xff0c;点击下一步 更改安装目录&#xff0c;点击下一步 等待安装完成 安装完成 2、配置环境变量 此电脑右键属性 -> 高级系统设置 -> 环境变量 -> 系统变量 -> 新建 变量名&#xff1a;JAVA_HOME变量…

kubernetes学习

1、应用部署方式演变 2、kubernetes介绍 3、kubernetes组件 4、kubernetes概念 5、环境搭建-环境规划 6、环境搭建-主机安装 7、环境搭建-环境初始化 8、环境搭建-集群所需组件安装 9、环境搭建-集群安装 10、环境搭建-网络插件安装 11、环境搭建-环境测试 12、资源管理…

Databend 开源周报第 140 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持 EXECUTE I…

3D模型格式转换工具HOOPS Exchange:3D CAD数据的快速导入与导出

在当今的工程设计领域中&#xff0c;快速且可靠地处理3D CAD数据是至关重要的。HOOPS Exchange SDK通过提供一组C软件库&#xff0c;为开发团队提供了实现这一目标的有效工具。 什么是HOOPS Exchange&#xff1f; HOOPS Exchange是一组C软件库&#xff0c;旨在为开发团队提供…

YOLOv1精读笔记

YOLO系列 摘要1. 将目标检测视为一个回归问题2. 定位准确率不如 SOTA&#xff0c;但背景错误率更低3. 泛化能力强 1.引言1.1 YOLO 速度很快1.2 全局推理 2. Unified Detection2.1 网络设计2.2 训练YOLOv1模型损失函数的选择和其潜在的问题YOLOv1模型如何改进其损失函数来更好地…

【史上最全】带你全方位了解containerd 的几种插件扩展模式

除了 snapshotter&#xff0c;containerd 的扩展机制你还了解哪些&#xff1f; 本文内容节选自 《containerd 原理剖析与实战》&#xff0c;本书正参加限时优惠内购&#xff0c;限时 69.9 元购买。 进入正题之前先看一下 containerd 的整体架构 1. containerd 架构 图 contain…

UE4_常见动画节点学习_Two Bone IK双骨骼IK

学习资料&#xff0c;仅供参考&#xff01; Two Bone IK 控制器将逆运动&#xff08;IK&#xff09;解算器应用于到如角色四肢等3关节链。 变量&#xff08; HandIKWeight &#xff09;被用于在角色的 hand_l 和 hand_r 控制器上驱动 关节目标位置&#xff08;Joint Target Lo…

Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错的问题

连接报错 解决方案 解决方法1&#xff1a;升级navicat 解决方法2&#xff1a;降级pgsql 解决方法3&#xff1a;修改dll 使用3解决 实操演示 1、 打开 Navicat 安装目录&#xff0c;找到libcc.dll文件 2、备份libcc.dll文件&#xff0c;将其复制并粘贴或者修改副本为任何其他名…

【C++杂项】cin的详细用法

cin详细用法 1. cin简介2. cin的常用读取方法2.1 cin>>的用法2.2 cin.get的用法2.3 cin.getline的用法 3. cin清空输入缓冲区4. 其它方法4.1 getline()读取一行 1. cin简介 cin是C中的标准输入流对象&#xff0c;即istream类的对象。cin主要用于从标准输入读取数据&…