当前位置: 首页 > backend >正文

Spring MVC中常用注解_笔记

1. @PathVariable

  • 功能:用于将URL中的模板变量绑定到方法的参数上。
  • 适用场景:RESTful风格的URL,例如获取特定资源的详细信息。
  • 注意事项
    • 确保URL模板中的变量名与方法参数名一致,或使用@PathVariable("variable")方式指定。
    • 默认参数必填,需用 required=false 设为可选
    • 支持类型自动转换(String → Integer/Long 等)
  • 示例
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {// 从数据库获取用户信息User user = userService.findById(id);return ResponseEntity.ok(user);
}// /users/123 → id=123

2. @RequestParam

  • 功能:用于获取URL中的查询参数(Query Parameters)或者表单数据。
  • 适用场景:需要获取一个或多个简单类型的参数(如字符串、整数等)。
  • 注意事项
    • 参数默认是必需的,可以通过required = false设置为可选。
    • 可以设置默认值(defaultValue)。
    • 支持集合类型(List<String>

示例

@GetMapping("/users")
public ResponseEntity<List<User>> searchUsers(@RequestParam(required = false) String name,@RequestParam(defaultValue = "0") int page) {// 根据名称和分页查询用户List<User> users = userService.search(name, page);return ResponseEntity.ok(users);
}// /users?name=Alice&page=2

3. @RequestHeader

  • 功能:用于获取HTTP请求头信息。
  • 适用场景:需要访问请求头中的特定字段,如Content-TypeAuthorization等。
  • 注意事项
    • 支持所有标准 HTTP 头(User-Agent, Accept-Language 等)
    • 同样可以设置requireddefaultValue
  • 示例
@GetMapping("/info")
public ResponseEntity<String> getInfo(@RequestHeader("User-Agent") String userAgent) {// 处理请求头中的User-Agentreturn ResponseEntity.ok("User-Agent: " + userAgent);
}

4. @CookieValue

  • 功能:用于获取HTTP请求中的Cookie值。
  • 适用场景:会话管理、追踪等场景,需要从Cookie中读取数据,例如会话ID。
  • 注意事项
    • 可以设置requireddefaultValue
    • 需确保 Cookie 存在(或设 required=false
    • 支持 Cookie 对象访问
  • 示例
@GetMapping("/demo")
public ResponseEntity<String> readCookie(@CookieValue("JSESSIONID") String sessionId) {// 使用会话ID进行一些操作return ResponseEntity.ok("Session ID: " + sessionId);
}

5. @ModelAttribute

  • 功能
    • 在方法参数上:将请求参数绑定到模型对象(通常用于表单提交)。
    • 在方法上:在控制器方法执行前自动向模型添加属性。
  • 适用场景
    • 处理表单提交,自动将表单字段绑定到对象。
    • 在多个请求处理方法前准备通用模型数据。
  • 注意事项
    • 自动应用数据绑定和验证
    • 支持级联属性绑定(user.address.city)
    • 绑定过程中会进行类型转换,如果转换失败会抛出异常。
    • 方法级使用可预加载模型数据
  • 示例
// 方法参数
@PostMapping("/users")
public String createUser(@ModelAttribute User user) {// 绑定表单数据到User对象userService.save(user);// 保存用户return "redirect:/users";
}// 方法级(预加载数据)
@ModelAttribute("categories")
public List<String> populateCategories() {return Arrays.asList("Admin", "User", "Guest");
}

    6. @SessionAttribute

    • 功能:用于访问预先存储在会话中的属性。
    • 适用场景:跨请求数据共享,如在多个请求之间共享用户登录信息。
    • 注意事项
      • 需要确保属性已经存在于会话中,否则会抛出异常。
    • 示例
    @GetMapping("/dashboard")
    public String dashboard(@SessionAttribute("user") User user) {// 使用会话中的用户信息return "dashboard";
    }
    

    7. @RequestPart

    • 功能:用于将multipart/form-data请求中的部分(如文件)绑定到方法参数。
    • 适用场景:文件上传,同时可能伴随其他表单字段。
    • 注意事项
      • 通常与MultipartFile一起使用,用于接收 MultipartFile 对象
      • 支持多个文件(MultipartFile[])。
    • 示例
    @PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@RequestPart("file") MultipartFile file,@RequestPart("metadata") String metadata) {  // metadata可以是JSON字符串// 处理上传文件return ResponseEntity.ok("File uploaded!");
    }
    

    8. @RequestBody

    • 功能:将HTTP请求体(如JSON)绑定到方法参数的Java对象上。
    • 适用场景:处理非表单数据(如JSON或XML)的POST/PUT请求。
    • 注意事项
      • 需要配置消息转换器(如MappingJackson2HttpMessageConverter)来解析JSON。
      • 不支持GET请求,因为GET请求没有请求体。
      • 通常与 DTO 对象配合使用
    • 示例
    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) {// 创建用户User savedUser = userService.save(user);return ResponseEntity.ok(savedUser);
    }
    

    9. @ResponseBody

    • 功能:将方法返回的对象直接写入HTTP响应体(如JSON或XML)。
    • 适用场景:构建RESTful API,返回数据而非视图名称。
    • 注意事项
      • 通常与@RestController一起使用(该注解组合了@Controller@ResponseBody)。
      • 支持异步处理
    • 示例
    @RestController // 类级别包含@ResponseBody
    public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {return userService.findById(id);}
    }@Controller 
    @ResponseBody //在@Controller中需显式声明
    public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {return userService.findById(id);}
    }

    10. @RestController

    • 功能:组合注解,包含@Controller@ResponseBody,表示该类是一个控制器,且所有方法返回值直接写入响应体。
    • 适用场景:构建RESTful Web服务。
    • 注意事项:不需要在方法上重复使用@ResponseBody
    • 示例
    @RestController
    @RequestMapping("/api")
    public class ApiController {// 所有方法都自动使用@ResponseBody
    }
    

    11. @ExceptionHandler

    • 功能:处理控制器内的异常
    • 适用场景:统一错误处理
    • 注意事项
      • 仅作用于当前控制器
      • 全局处理需搭配 @ControllerAdvice
      • 可指定处理的异常类型
    • 示例
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse(ex.getMessage()));
    }
    

    总结

    正确选择注解可显著提升开发效率和代码可维护性。实际开发中:

    • REST API 优先使用 @PathVariable + @RequestBody + @ResponseBody
    • 传统 Web 应用多用 @ModelAttribute + @RequestParam
    • 文件上传必用 @RequestPart
    • 全局异常处理结合 @ExceptionHandler 和 @ControllerAdvice

    相关阅读

    Spring Cloud OpenFeign 常用注解_笔记-CSDN博客

    http://www.xdnf.cn/news/16155.html

    相关文章:

  • 【Linux】linux基础开发工具(一) 软件包管理器yum、编辑器vim使用与相关命令
  • MCU(微控制器)中的高电平与低电平?
  • 实战演练11:生成式对话机器人(Bloom)
  • 输电线路微气象在线监测装置:保障电网安全的科技屏障
  • [网安工具] 自动化威胁检测工具 —— D 盾 · 使用手册
  • 多模态LLM/Diffusion推理加速
  • 11.2 yolov8用自己的数据集训练语义分割模型
  • Android Camera createCaptureSession
  • Mysql命令show processlist
  • 成品电池综合测试仪:保障电池品质与安全的核心工具|深圳鑫达能
  • 聚观早报 | 猿编程推动中美青少年AI实践;华为Pura 80数字版售价公布;iPhone 17 Air电池曝光
  • J2EE模式---组合实体模式
  • ollama无法拉取模型导致报错
  • Linux724 逻辑卷挂载;挂载点扩容;逻辑卷开机自启
  • 噪声环境下的数据驱动预测控制:提升抗测量噪声干扰能力
  • Python桌面版数独(五版)-优化选择模式触发新棋盘生成
  • Opencv C# 重叠 粘连 Overlap 轮廓分割 (不知道不知道)
  • STM32 HAL库 HAL_TIM_OC_Stop函数详细解释
  • Flink-1.19.0源码详解7-Flink集群端调度
  • RWA与DeFi(去中心化金融)的关系是什么?RWA在DeFi中扮演什么角色?
  • 使用ffmpeg转码h265后mac默认播放器不支持问题
  • 亚马逊云科技实战架构:构建可扩展、高效率、无服务器应用
  • 【25-cv-08165】纸牌游戏 UNO注册商标!!由GBC律所代理发案
  • b-up:Enzo_mi:Transformer DETR系列
  • Java 实现 C/S 架构详解:从基础到实战,彻底掌握客户端/服务端编程
  • 项目质量如何提升?
  • C++常见面试题/笔试收录(一)
  • 深入探索Amazon SQS:构建弹性微服务与无服务器应用的秘密武器
  • 模拟退火算法 (Simulated Annealing, SA)简介
  • Unity GC 系列教程第四篇:GC Alloc 优化技巧与实践(下)与 GC 调优