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

embedded/2024/12/21 23:04:44/

引言

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

一、Controller 类级别的注解

1. 控制器类注解

@Controller

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

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

2. RESTful控制器注解

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

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

二、路径映射注解

@RequestMapping

java">@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

java">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

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

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

@RequestParam

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

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

@RequestBody

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

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

@RequestHeader

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

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

@CookieValue

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

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

@ModelAttribute

java">@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 使用,对方法参数进行数据校验。

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

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

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

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

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


http://www.ppmy.cn/embedded/1908.html

相关文章

IDEA版本

IDEA版本 IDEA版本

ubuntu20.04手动编译opencv 4.9.0遇到的问题汇总

ubuntu20.04手动编译opencv 4.9.0遇到的问题汇总 编译流程 以4.9.0版本为例&#xff0c;可参考&#xff1a; https://docs.opencv.org/4.9.0/d2/de6/tutorial_py_setup_in_ubuntu.htmlhttps://linuxize.com/post/how-to-install-opencv-on-ubuntu-20-04/https://blog.csdn.n…

什么是网络安全,企业如何做好网络安全等级评测

网络安全从其本质上讲就是网络上的信息安全&#xff0c;指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露&#xff0c;系统可靠正常地运行&#xff0c;网络服务不中断。从用户的角度&#xff0c;他们希望涉及到个人和商业的信息在网络上传输时受到机密性、完整性…

ES6判断:当前数组对象里的所有的值是否都存在于另外一个数组里

介绍 判断当前数组里的值是否都存在于另一个数组里&#xff0c;这里需要用到ES6的 every()方法&#xff0c;及 includes()方法; every(): 用于判断数组中的每一项是否均符合条件&#xff0c;并返回一个布尔值&#xff0c;都符合返回 true&#xff0c;有一个不符合就返回 fals…

前端Vue3之基础知识点碎片

1、Element Plus是啥&#xff1f; Element Plus 是一个基于 Vue 3 框架构建的开源 UI&#xff08;用户界面&#xff09;组件库&#xff0c;旨在帮助开发者快速搭建企业级的 Web 应用程序界面。Element Plus 提供了一系列预先设计好的高质量 UI 组件&#xff0c;这些组件涵盖了…

【服务器部署篇】Linux下Jenkins安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

生信分析Linux教程-GTF文件处理

P18 GTF文件处理01 P19 GTF文件处理02 生物信息中Linux命令练习 1 统计GTF文件中染色体数目&#xff1f; 2 统计GTF文件中基因数目&#xff1f; 3 计算GTF中外显子总长度&#xff1f; 4 计算GTF文件中基因所拥有的平均转录本数目

标题:探索算法世界的奇妙与力量

标题&#xff1a;探索算法世界的奇妙与力量 在当今信息时代&#xff0c;算法已经成为了我们生活中不可或缺的一部分。从搜索引擎、社交媒体&#xff0c;到无人驾驶、机器人&#xff0c;算法都在其中发挥着重要的作用。本文将为您详细介绍算法的概念、类型、应用场景以及算法的…