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

【SpringMVC】Controller的多种方式接收请求参数

在Spring MVC中,控制器方法可以通过多种方式接收请求参数。以下是最常见的参数传递方法:

路径变量(Path Variables):

使用@PathVariable注解从URL路径中获取参数。
示例:对于URL /dishes/{id}:

@GetMapping("/dishes/{id}")
public ResponseEntity<Result> getById(@PathVariable Long id) {
    // 业务逻辑
}

查询参数(Query Parameters):

使用@RequestParam注解处理查询字符串中的参数。
示例:对于URL /dishes?name=salad:

@GetMapping("/dishes")
public ResponseEntity<Result> getByName(@RequestParam String name) {
    // 业务逻辑
}

请求体(Request Body):

使用@RequestBody注解将请求体中的JSON数据转换为Java对象。
示例:

@PostMapping("/dishes")
public ResponseEntity<Result> save(@RequestBody DishDTO dishDTO) {
    // 业务逻辑
}

请求头(Request Headers):

使用@RequestHeader注解获取请求头中的数据。
示例:

@GetMapping("/dishes")
public ResponseEntity<Result> getDishes(@RequestHeader("Authorization") String authToken) {
    // 业务逻辑
}

Cookie值:

使用@CookieValue注解从请求的Cookie中获取特定值。
示例:

@GetMapping("/dishes")
public ResponseEntity<Result> getDishes(@CookieValue("sessionId") String sessionId) {
    // 业务逻辑
}

表单参数(Form Parameters):

类似于处理查询参数,使用@RequestParam来处理表单提交的数据。常用于application/x-www-form-urlencoded编码。
示例:

@PostMapping("/dishes")
public ResponseEntity<Result> handleForm(@RequestParam String name, @RequestParam String description) {
    // 业务逻辑
}

Model Attribute:

使用@ModelAttribute可以将请求参数绑定到一个Java对象,通常用于表单数据的绑定和数据预填充。
示例:

@PostMapping("/dishes")
public ResponseEntity<Result> createDish(@ModelAttribute DishDTO dishDTO) {
    // 业务逻辑
}

Session Attributes:

使用@SessionAttribute注解从HTTPSession获取数据。
示例:

@GetMapping("/dishes")
public ResponseEntity<Result> getFromSession(@SessionAttribute("user") User user) {
    // 业务逻辑
}

补充

文件上传

@PostMapping("/upload")
public Result<String> upload(MultipartFile file){
 }

在Spring MVC中,处理文件上传时,确实可以不显式地使用@RequestParam注解来绑定MultipartFile参数,只要参数名称与表单上传的字段名称一致。Spring会自动匹配表单字段名称与控制器方法参数名称。

@PostMapping("/upload")
public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) {
}

http://www.kler.cn/a/552851.html

相关文章:

  • FastGPT及大模型API(Docker)私有化部署指南
  • JavaAPI(字符串 正则表达式)
  • Linksys WRT54G路由器溢出漏洞分析–运行环境修复
  • 记录 pycharm 无法识别提示导入已有的模块解决方案 No module named ‘xxx‘
  • DeepSeek 与 ChatGPT 对比分析:谁更适合你的需求?
  • 23种设计模式 - 命令模式
  • 智享AI直播三代系统,马斯克旗下AI人工智能直播工具,媲美DeepSeek!
  • Transformer学习——Vision Transformer(VIT)原理
  • 一文看常见的消息队列对比
  • C++ 完美转发:泛型编程中的参数无损传递
  • redis解决高并发看门狗策略
  • 洛谷P11042 [蓝桥杯 2024 省 Java B] 类斐波那契循环数
  • 【Python爬虫(12)】正则表达式:Python爬虫的进阶利刃
  • 嵌入式音视频开发(二)ffmpeg音视频同步
  • 简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
  • 自动化运维之ansible快速入门
  • 202303 青少年软件编程等级考试C/C++ 三级真题答案及解析(电子学会)
  • SVM对偶问题
  • SpringMVC重定向接口,参数暴露在url中解决方案!RedirectAttributes
  • EasyRTC:智能硬件适配,实现多端音视频互动新突破