Spring数据接收揭秘
@RequestMapping
@RequestMapping是Spring框架中用于将HTTP请求映射到控制器的处理方法上的注解,它能将特定的HTTP请求与控制器中的方法进行关联,使开发者可以根据请求的路径、请求方法、请求头、请求参数等条件,来确定由哪个方法处理该请求,从而实现对不同类型请求的精准处理。
常用属性
- value和path:用于指定请求的路径,可以是一个或多个字符串数组,如@RequestMapping(value = "/users", method = RequestMethod.GET) ,将处理路径为 /users 的GET请求。
- method:指定可接收的HTTP请求方法,如GET、POST、PUT、DELETE等,若不指定,默认可接收所有类型的请求。
- params:用于对请求的参数进行限制,例如, @RequestMapping(value = "/user", params = "id=123") ,当请求中包含名为 id 且值为 123 的参数时,该方法才会被调用。
- headers:可对请求头进行限制。如 @RequestMapping(value = "/admin", headers = "Authorization=admin_token") ,只有请求头中包含指定的 Authorization 值时,方法才会处理该请求。
示例:
@Controller
@RequestMapping("/api")
public class UserController {
// 处理路径为/api/users的GET请求
@RequestMapping(value = "/users", method = RequestMethod.GET)
//
// 处理路径为/api/userst请求
@RequestMapping(value = "/usert", params = "id=123")
//
}
*
- @GetMapping:@RequestMapping(method = RequestMethod.GET) 的快捷方式,用于处理GET请求。
- @PostMapping:@RequestMapping(method = RequestMethod.POST) 的简化形式,用于处理POST请求。
- @PutMapping:@RequestMapping(method = RequestMethod.PUT) 的快捷方式,用于处理PUT请求。
- @DeleteMapping:对应@RequestMapping(method = RequestMethod.DELETE),用于处理DELETE请求,主要用于删除资源。
@RequestParam
@RequestParam主要用于从HTTP请求中提取参数值,并将其绑定到控制器方法的参数上,使开发者能方便地在方法中使用请求参数进行业务逻辑处理。
常用属性
- value或name:用于指定要获取的参数名称,如@RequestParam("user")获取名为user的参数值,若方法参数名与请求参数名相同,可省略此属性。
- required:指定参数是否必需,默认值为 true,即请求中必须包含该参数,否则会抛出异常;若设置为 false ,则请求中可不包含该参数,此时方法参数会被赋值为null或默认值。
- defaultValue:当请求中未包含指定参数时,设置参数的默认值。
当控制器方法被调用时,Spring会检查方法的参数是否被@RequestParam注解标注,如果是,它会根据注解中指定的参数名称,从HTTP请求中查找对应的参数值,找到后,将其转换为方法参数所需的类型,并赋值给该参数。
示例:
@Controller
@RequestMapping("/api")
public class UserController {
// 从请求中获取名为id的参数值
@GetMapping
public String search(@RequestParam("id") String name) {
//
}
// 获取可选参数page,若请求中未传递,则默认为1
@GetMapping("/apit")
public String Apit(@RequestParam(defaultValue = "1") Integer page, String name) {
//
}
}
@PathVariable
在Spring MVC的控制器方法的参数前使用@PathVariable注解,如 public String method(@PathVariable String name),其中name需与URL路径中的参数名一致。
示例
@GetMapping("/users/{id}")
public String getUserById(@PathVariable String id) {
//
}
其中{id}是URL路径中的变量部分,@PathVariable注解将该变量的值绑定到方法参数 id 上。
@PathVariable可以与@RequestMapping或@GetMapping等结合,用于定义包含路径变量的请求映射。
@RequestMapping("/orders/{orId}/items/{itId}")
public String NewItem(@PathVariable String orId, @PathVariable String itId) {
//
}
通过 @RequestMapping 定义了一个包含两个路径变量 {orderId} 和 {itemId} 的请求路径,
@RequestBody
@RequestBody主要用于将请求体中的数据绑定到控制器方法的参数上
功能与用途
它可以将HTTP请求中的数据,将其转换为Java对象,以便在控制器方法中直接使用该对象进行业务逻辑处理,从而简化数据提取和转换的过程。
如何在Spring MVC控制器中使用 @RequestBody 注解:
@RestController
public class UserController {
@PostMapping("/users")
public void createUser(@RequestBody User user) {
//
}
}
class User {
private String name;
private int age;
// 省略构造函数、Getter和Setter方法
}
createUser 方法使用 @RequestBody 注解将请求体中的JSON数据转换为User对象,假设前端发送一个包含 name 和age属性的JSON对象,Spring框架会将其转换为User并传递给createUser方法。