• 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 {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    2. RESTful控制器注解

    @RestController
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class MyRestController {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    用途:@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() {
            // ...
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    用途:它可以放在类或方法上,用于指定控制器类或者方法处理的请求的基本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) {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    四、 方法参数注解

    @PathVariable

    @GetMapping("/users/{userId}/details")
    public UserDetails getUserDetails(@PathVariable("userId") Long userId) {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4

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

    @RequestParam

    @GetMapping("/search")
    public List<User> searchUsers(
        @RequestParam(name = "name", required = false) String name,
        @RequestParam(defaultValue = "10") int limit) {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    @RequestBody

    @PostMapping("/users")
    public User createUser(@RequestBody User newUser) {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4

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

    @RequestHeader

    @GetMapping("/headers")
    public String getHeaderValue(@RequestHeader("Authorization") String authHeader) {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4

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

    @CookieValue

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

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

    @ModelAttribute

    @ModelAttribute("userForm")
    public UserForm setUpUserForm() {
        return new UserForm();
    }
    
    @PostMapping("/register")
    public String register(@ModelAttribute("userForm") UserForm userForm) {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    五、其他增强型注解

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

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

    @PostMapping("/register")
    public String register(@Valid @ModelAttribute("userForm") UserForm userForm, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            // ...
        }
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(UserNotFoundException.class)
        public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
            // ...
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

  • 相关阅读:
    共享按摩设备
    kafka知识点总结
    红外小目标:AGPCNet网络结构与模型搭建
    SAP S4 FI后台详细配置教程- PART4 (科目及税费相关配置篇)
    ⑩④【MySQL】什么是视图?怎么用?视图的检查选项? 视图的作用?[VIEW]
    最低成本的foc驱动电路,5v低压开环foc驱动器
    【23种设计模式】里氏替换原则
    数据结构与算法之复杂度
    基于遗传算法改进的BP神经网络图像分割,BP神经网络基本原理,遗传算法流程,
    redis的数据类型
  • 原文地址:https://blog.csdn.net/dazhong2012/article/details/137966867