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

【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) {
}

相关文章:

  • DeepSeek模型快速部署教程-搭建自己的DeepSeek
  • 在Unity中用简单工厂模式模拟原神中的元素反应
  • DeepSeek服务器繁忙 多种方式继续优雅的使用它
  • MySQL 的存储引擎有哪些?它们之间有什么区别? MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? MySQL 的索引类型有哪些?
  • 框架篇 - Hearth ArcGIS 框架扩展(DryIoC、Options、Nlog...)
  • XCP协议
  • 【刷题】leetcode
  • var、let、const区别
  • 项目中分库分表的分布式ID如何生成
  • 数据结构与算法-搜索-bfs(floodfill and 最短路):池塘计数,城堡问题,山峰和山谷,迷宫问题,武士分度的牛,抓住那头牛
  • 深入理解 QObject的作用
  • 【JavaEE进阶】#{}和${}
  • 【Pandas】pandas Series reindex_like
  • Casbin 权限管理介绍及在 Go 语言中的使用入门
  • 【AI工具之Deepseek+Kimi一键免费生成PPT】
  • Redis Windows 设置密码
  • 关于人工智能的学习方向应该怎么选择
  • 3.3.1 交易体系构建——参与上涨趋势
  • 解决DeepSeek服务器繁忙问题的实用指南
  • 猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势
  • 上海发布大风黄警:预计未来24小时内将出现8-10级大风
  • 央行:全力推进一揽子金融政策加快落地
  • 马上评|颜宁“简历打假”的启示
  • 魔都眼|上海多家商场打开绿色通道,助力外贸出口商品转内销
  • 潘功胜:将下调个人住房公积金贷款利率0.25个百分点
  • 五一假期上海虹桥边检站出入境近4.7万人次,韩国入境旅客同比增118%