Spring注解@RequestMapping、@ResponseBody 和 @RequestBody用法

本文介绍了Spring MVC中常用的三个注解:@RequestMapping用于处理请求地址映射,@ResponseBody将方法返回值写入HTTP响应正文,@RequestBody将HTTP请求正文插入方法。文章通过实例讲解了它们的使用场景和作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

背景

@RequestMapping

@ResponseBody

当页面发出异步请求时

后端代码

@RequestBody


背景

    帮助同事解决文件上传的bug(文件上传成功,但是页面提示上传接口异常,数据的确是插入了),从前端layui页面找错误,然后浏览器调试,找了半天无果。layui文件上传格式code返回是数值,后台返回是success。然后尝试从后台返回值入手,使用map返回。结果告败。最后当我回到位置上运行自己的项目时,想起来了,可能是后台没有响应体。果然是,bingo解决!

@RequestMapping @ResponseBody 和 @RequestBody 我们经常使用,它们的区别是什么呢,下面简单介绍下:

@RequestMapping

     @RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法。例如:

/**
* 用于类上,可以没有
*/
@RequestMapping(value = "/controllerDemo")
public class ControllerDemo {
    // 用于方法上,必须有
    @RequestMapping(value = "/methodDemo")    
    public String 
### Spring MVC 注解详解 #### @RequestMapping 的使用场景及特点 `@RequestMapping` 是一个基础性的注解,可用于类级别方法级别。当应用于类时,它定义了一个公共的基础路径,该路径会与方法级别的路径组合形成最终访问地址[^1]。 对于具体的 HTTP 请求方式支持,虽然 `@RequestMapping` 能够接收所有的 HTTP 方法(GET, POST 等),但在实际开发中更推荐使用其衍生出来的专门用于某一种请求类型的子注解,比如 `@GetMapping`, `@PostMapping` 等,因为这些子注解具有更高的语义清晰度并能减少代码量[^2]。 ```java // 类级注解设置全局前缀 @RequestMapping("/api") public class MyController { // GET /api/resource @RequestMapping(value="/resource", method=RequestMethod.GET) public String getResource(){ return "Resource"; } } ``` #### @RequestParam @PathVariable 对比 两者都用来传递参数给控制器的方法,但是它们的工作机制有所不同: - **@RequestParam**: 主要用于获取查询字符串中的键值对形式的数据,即 URL 后面跟问号后面的部分(`?key=value`)。如果希望从表单提交或者链接后面的参数里取数据就用这个注解[^4]。 ```java // http://localhost:8080/api/user?id=123&name=testUser @GetMapping("/user") public User getUser(@RequestParam Long id, @RequestParam String name){ return userService.findUserByIdAndName(id,name); } ``` - **@PathVariable**: 则是用来捕获 URI 模板中的动态部分,也就是 URL 中的占位符 `{}` 。这种方式使得 RESTful 风格 API 更加直观易读[^5]. ```java // http://localhost:8080/api/users/123 @GetMapping("/users/{id}") public User getUserById(@PathVariable("id") long userId){ return userService.findById(userId); } ``` #### @RequestBody @ResponseBody 解析 这两个注解主要用于处理 JSON 或 XML 形式的实体内容传输: - **@RequestBody**: 接收客户端发送过来的内容体,并将其转换成 Java 对象实例化传入控制层函数内作为参数. ```java @PostMapping("/addUser") public ResponseEntity<String> addUser(@RequestBody User user){ userService.save(user); return new ResponseEntity<>("success", HttpStatus.CREATED); } ``` - **@ResponseBody**: 将返回的对象序列化为 JSON/XML 字符串响应给前端浏览器显示. 它通常配合 `@RestController` 来简化视图解析过程. ```java @RestController public class UserController{ @GetMapping("/getUserJson") public User getUserJson(){ return userService.findOne(); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小渔夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值