当前位置: 首页 > 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.lryc.cn/news/598148.html

    相关文章:

  • nuxt更改页面渲染的html,去除自定义属性、
  • 【Word Press进阶】自定义区块的行为与样式
  • go项目实战二
  • Linux应用开发基础知识——进程学习2(exec函数、system函数、popen函数)(三)
  • 数据挖掘顶刊TKDE论文分享│ST-LLM+:面向交通预测的图增强时空大语言模型
  • 第五章 Freertos物联网实战 微信小程序篇
  • 从0开始学习R语言-Day56--空间变系数模型
  • Django基础(八)———数据库外键及表关系
  • Transformer Masked loss原理精讲及其PyTorch逐行实现
  • Kubernetes 集群架构和Pod创建流程
  • 【unity游戏开发入门到精通——组件篇】unity的粒子系统力场 (Particle System Force Field)实现如旋风、吸引力、风吹效果等
  • Unity GC 系列教程第四篇:GC Alloc 优化技巧与实践(下)与 GC 调优
  • 时序数据库IoTDB的核心功能特性
  • iOS WebView 加载失败与缓存刷新问题排查实战指南
  • 【Lucene】文件概览
  • 3D Semantic Occupancy Prediction
  • Linux进程生命周期:从创建到回收的完整闭环
  • 【建模与仿真】融合共现网络特征与知识增强语义梯度提升电子邮件分类
  • Jenkins最新版本的安装以及集成Allure生成测试报告
  • 跨越学术边界的战略选择:英文专著的潜在价值发掘
  • C++11之可变参数模板
  • 不同类型的交易所交易规则有哪些区别?
  • Apache Flink 实时流处理性能优化实践指南
  • Spring中的循环依赖:解密、破局与架构启示
  • 视频二维码在产品设备说明书中的应用
  • AI 在金融:重塑金融服务的智能革命
  • markdown学习笔记(个人向) Part.2
  • ESP-NOW无线通信协议:物联网设备间的高效对话方式
  • Effective Modern C++ 条款16:保证const成员函数的线程安全性
  • 字节的机器人模型 GR-3