SpringMVC请求与响应
请求映射
在 SpringMVC 中,请求映射(Request Mapping)是核心机制之一,它负责将客户端发送的 HTTP 请求与控制器(Controller)中的具体方法建立关联,是请求进入后端处理的 “入口导航”。
基础注解
@RequestMapping
是 SpringMVC 中定义请求映射的基础注解,可用于类级别和方法级别,作用是指定一个 HTTP 请求的路径、方法、参数等条件,当请求满足条件时,会被映射到对应的控制器方法。
标注在类上:为当前类所有方法的请求路径指定「父路径」,缩小映射范围。
标注在方法上:指定具体的请求路径,与类上的路径共同组成完整路径。
路径也可以不编写,/ 表示应用的根目录开始派生注解
为了简化method属性的使用,Spring4.3 之后提供了一系列派生注解,它们本质是@RequestMapping结合特定method的快捷方式:
派生注解 | 对应 HTTP 方法 | 等价于 |
---|---|---|
@GetMapping | GET(查询数据) | @RequestMapping(method = RequestMethod.GET) |
@PostMapping | POST(提交数据) | @RequestMapping(method = RequestMethod.POST) |
@DeleteMapping | DELETE(删除数据) | @RequestMapping(method = RequestMethod.DELETE) |
- 路径变量(
@PathVariable
)
当请求路径中包含动态参数时,可通过@PathVariable注解获取路径中的变量
在@RequestMapping的路径中,用{变量名}
定义路径变量,在方法参数中,用@PathVariable("变量名")
绑定变量值(变量名可省略,前提是参数名与路径变量名一致)。 - 请求参数映射(
@RequestParam
)
用于获取 HTTP 请求中的参数,并绑定到方法参数。
value/name:指定请求参数名(参数名与变量名不一致时使用)。
required:是否必填(默认true,必填时若参数不存在则抛 400 错误)。
defaultValue:默认值(设置后required自动为false)。 - 请求体映射(
@RequestBody
)
当客户端发送包含数据的请求体时,@RequestBody 可以将其自动转换为对应的 Java 对象,无需手动解析,需配合消息转换器,如 Jackson 处理 JSON.
@ResponseBody
是一个用于处理控制器方法返回值的注解,主要作用是将方法的返回值直接作为 HTTP 响应体返回给客户端,而不是通过视图解析器渲染成页面。
下面是代码演示:
@RequestMapping("/save")
@ResponseBody
public String save(String username,String password){
System.out.println("save方法执行了........."+username+"......"+password);
return "success";
}
路径变量用法
@PostMapping("/delete/{id}")
@ResponseBody
public String delete(@PathVariable Integer id){
return "success";
}
将数据封装在model中进行传参形式:
package com.qcby.entity;
public class LoginUser {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "LoginUser{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
@RequestMapping("/save1")
@ResponseBody
public String save1(LoginUser loginUseruser){
System.out.println("save1方法执行了............");
return "success";
}
数据响应
用于返回 JSON/XML 等数据,核心是通过 @ResponseBody
注解跳过页面解析,直接将数据转为响应体返回给客户端,而不是通过视图解析器渲染成页面。
简化用法:用 @RestController 注解替代 @Controller + @ResponseBody,类中所有方法默认返回数据(不跳转页面)。
下面是代码演示:
@DeleteMapping("/deleteBatch")
@ResponseBody
public Result deleteBatch(@RequestBody List<User> list){
userService.deleteBatch(list);
return Result.success();
}