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

Spring中Controller层中容易搞混的注解

一、@RequestBody和@ResponseBody

1.@RequestBody:

        用于将 ​​HTTP 请求体(通常是 JSON 或 XML 格式)​​ 中的数据 ​​绑定到一个 Java 对象上​​,并将其传递给控制器方法的参数上

@PostMapping("/users")
public ResponseEntity<String> createUser(@RequestBody User user) {// 这里的 user 对象会自动从请求体中的 JSON 数据映射过来return ResponseEntity.ok("User created: " + user.getName());
}

客户端发送的请求示例(JSON):​

{"name": "Alice","age": 25
}

2.@ResponseBody:

        表示方法的返回值​不是视图名称,而是直接作为 HTTP 响应体返回给客户端​​(比如返回 JSON 或 XML 数据)

@GetMapping("/user/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {User user = userService.findById(id);return user; // 返回的 User 对象会被自动转换为 JSON
}

说明:​

  • 如果方法标注了 @ResponseBody,Spring 会使用消息转换器(如 Jackson)将返回的对象序列化为 JSON 或 XML,然后写入 HTTP 响应体。

  • 在 Spring Boot 的 @RestController注解中,​​所有方法默认都带有 @ResponseBody 的效果​​,所以不需要再显式写。


二、@PathVariable和@RequestParam

1.@PathVariable:

        用于从 ​​URL 路径模板中提取变量值​​,通常用于 ​​RESTful 风格的 URL​​。当你希望 URL 中包含动态参数时(如 /user/123,其中 123是用户ID),可以使用 @PathVariable获取这个值。

@GetMapping("/user/{id}")
public User getUserById(@PathVariable Long id) {return userService.findById(id);
}

访问 URL 示例:​

GET /user/1001

​说明:​

  • {id}是路径变量,@PathVariable Long id表示将 URL 中的 1001绑定到参数 id上。

  • 可以指定变量名,如 @PathVariable("id"),但若变量名一致可省略。

2.@RequestParam:

        用于从 ​​URL 的查询参数(即 ?key=value 形式)中提取值​​.当客户端通过 ​​GET 请求的查询字符串传参​​(如 /user?name=Alice&age=25),你可以使用 @RequestParam来获取这些参数。

@GetMapping("/user")
public List<User> findUsers(@RequestParam String name,@RequestParam(defaultValue = "18") int age) {// 根据 name 和 age 查找用户return userService.findByNameAndAge(name, age);
}

​访问 URL 示例:​

GET /user?name=Alice&age=25

​说明:​

  • 参数名默认与方法参数名相同,也可以显式指定,如 @RequestParam("name") String userName

  • 支持设置默认值:@RequestParam(defaultValue = "18") int age,如果客户端未传 age,则默认为 18。

  • 该注解常用于 ​​GET 请求的筛选、分页、排序等参数传递​​。

http://www.dtcms.com/a/391272.html

相关文章:

  • Git GitHub 个人账户创建教程
  • Python学习系统计划:从零到精通的科学路径
  • 解锁 JavaScript 的数学魔法:深入探索 Math 对象
  • dcm4che系列主要开源项目概述
  • 枚举深入解析
  • Qt中delete与deleteLater()的使用
  • AD5621(单通道缓冲电压输出DAC)芯片的详细用法
  • vLLM的面试题
  • 最优控制3 -- 动态规划-一个解析解的例子
  • 深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论
  • 京东零售张科:DataAI Infra会成为驱动未来的技术基石
  • Java 运维中的一些常用命令
  • 用 go-commons 打造一套最小可行监控体系
  • 广东省省考备考(第一百零二天9.19)——言语(拔高突破第二节课)
  • 在vscode中,在powershell 下,如何进入子目录?
  • 易语言源码怎么制作软件 易语言源码和模块怎么做成软件
  • 4-2〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸目录遍历漏洞-B
  • 【Javaweb】http协议-请求与响应
  • 内网穿透系列十三:wstunnel 一款通过 Websocket 或 HTTP2 隧道传输的内网穿透工具
  • 【开关电源篇】自激振荡开关电源原理详解-从模块解析到故障维修
  • SpringBoot+Vue实现图片上传
  • C++ 函数指针与排序策略
  • 12分钟讲解Python核心理念
  • 01数据结构-串和KMP算法
  • 前端性能优化实用方案(三):骨架屏提升30%用户感知速度
  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控一站式建设方案
  • window XP环境下配置VC6.0的Win32汇编语言开发环境
  • 【算法】0_算法工程师常见算法题
  • 免费插件分享 | BaseTool
  • sk04.【scikit-learn基础】--『监督学习』之 线性回归