Spring MVC @RequestMapping @ResponseBody @RequestBody @PathVariable @RestController ...总结

本文深入探讨SpringMVC框架中关键注解的作用与用法,包括@RequestMapping、@ResponseBody、@RequestBody、@PathVariable、@RequestParam等,帮助读者理解Web开发中请求映射、参数绑定及响应处理机制。

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

Spring MVC框架是目前使用最广泛的Web框架,在该框架种涉及到一些常用的重要注解,现总结如下:

@RequestMapping

    作用:请求映射,也就是将请求的URI映射到特定的Hander类或者方法上。官方解释如下:

在该注解下还支持一些相关的注解和参数,当然你可以根据你的需求进行配置。

1.path配置@RequestMapping(“/ foo”)等价于@RequestMapping(path =“/ foo”);

2.方法配置指定该请求支持的HTTP方法,GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE,TRACE。,配置方式

 @RequestMapping(“/ foo”,method = RequestMethod.GET),RequestMethod是一个枚举类,

为了简化方法的配置,Spring MVC框架推出了以上方法的复合注解,例如@ GetMapping,@ PostMapping,例如GetMapping的注解实现

3.参数配置和报头配置,就是通过指定参数和标题来缩小映射,其实一般不常用

4.consumers设置,该设置就是指定HTTP请求中的Content-Type。可以指定一个或者多个以及非允许的格式

此处就是限制POST之类的请求体中的数据格式。

5.produces设置,该设置就是指定HTTP请求中的接受头的设置。

那么Content-Type与Accept的区别是什么?两者都是描述媒体类型的,表示为MIME类型。在响应体中,Content-Type标题告诉客户实际返回的内容的内容类型。接受请求的HTTP标头通告了内容类型,并表示为MIME类型,客户端是能够理解的。使用内容协商,服务器然后选择其中一个提议,使用它并通过Content-Type响应头通知客户它的选择。

@ResponseBody

         该注释表明一个方法的返回值应该被绑定到web响应的body体内。现在web开发普遍是前后端分离以及ajax请求技术的使用,使用Web MVC的场景较少,所以为了避免在每一个方法上添加该注解的繁琐,春天提供了RestController注解,该注解是与@ResponseBody @Controller的复合注解。

@RequestBody

该注解表明一个方法的参数应该被绑定到网页请求的身体体上,这个请求体会被HttpMessageConverter解析为指定的类型。

唯一可配置的参数是必需的,用来指示该参数为必须还是非必须。例如

@PostMapping( “/添加/用户”)

public void add(@RequestBody User user){

}

@PathVariable

该注解表明一个方法的参数被绑定到一个URI模板变量。例如

@GetMapping( “/选择/ {用户id}”)

public void select(@PathVariable Integer userId){

}

@RequestParam

该注解让我们可以方便的从一个请求中获取参数,但是前提条件是请求的参数类型是地图,那么实际应用中只有获得请求以及非GET请求时身体中数据提交方式是形式的数据或者X-WWW - 形式进行了urlencoded才可以使用该方式获取参数,否则会报

org.springframework.web.bind.MissingServletRequestParameterException:必需的字符串参数'**'不存在,Spring MVC会将该错误封装为400 bad request

@GetMapping( “/选择/”)

public void select(@RequestParam Integer userId){

}

 

除了以上注解为还有一些注解例如@RequestPart @ *** Attribute / s等等,不是很常用。

### 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(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值