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

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.dtcms.com/a/295734.html

    相关文章:

  • Kafka入门指南:从零开始掌握分布式消息队列
  • uniapp vue3版本中使用pinia 以及持久化处理
  • 【自用】NLP算法面经(6)
  • TCP重传率优化在云服务器网络协议栈的调优实践
  • MySQL高可用部署
  • 深度分析Android多线程编程
  • aml1-eto 移植后多长时间转阴
  • Android跨进程通信完全教程:从基础到实战
  • 从0开始学习R语言-Day56--空间变系数模型
  • 进阶向:基于Python的轻量级Markdown笔记管理器
  • git鉴权失败问题每次clone 都要输入用户名密码问题
  • Two Knights(数学归纳)
  • 本地部署Jupyter服务,没有公网IP如何用内网穿透工具实现外网远程访问?
  • 人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用
  • Linux 下安装Python指定版本(可离线安装)
  • Java学习----工厂方法模式
  • 线程通信模型
  • 中国西北典型绿洲区土壤水分特征(2018-2019年)
  • [火了]-----FastGPT 插件系统架构演进:从 Monorepo 到独立生态
  • Spring MVC 统一响应格式:ResponseBodyAdvice 从浅入深
  • 快速将前端得依赖打为tar包(yarn.lock版本)并且推送至nexus私有依赖仓库(笔记)
  • 【工具变量】省市县空气流通系数数据集(1940-2025.3年)
  • Dataease2.10 前端二次开发
  • Windows 系统中 CURL 命令使用指南及常见错误解析
  • Silly Tavern 教程②:首次启动与基础设置
  • 极客大挑战2019-HTTP
  • Vulnhub Matrix-Breakout-2-Morpheus靶机攻略
  • 网络资源模板--基于Android Studio 实现的线上点餐系统
  • 【Linux基础知识系列】第六十三篇 - 文件编辑器基础:vim
  • 自己动手造轮子:如何创建JAR并通过Maven在Spring Boot中引用