SpringBoot接口注解
一、常见注解
@RestController
: 用于标识一个类是RESTful风格的控制器,可以处理HTTP请求并返回RESTful响应。@RequestMapping
: 用于定义HTTP请求的映射规则,包括URL路径、HTTP方法、请求参数等。@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
等:分别用于定义GET、POST、PUT、DELETE等HTTP方法的映射规则。@RequestParam
: 用于获取HTTP请求中的请求参数,并将其绑定到方法参数上。@PathVariable
: 用于获取URL路径中的占位符值,并将其绑定到方法参数上。@RequestBody
: 用于将HTTP请求体中的数据绑定到方法参数上,通常用于接收JSON、XML等格式的请求体。@ResponseBody
: 用于将方法返回的数据转换为HTTP响应体,并发送给客户端(@RestController包含了@ResponseBody和@Controller)。
二、RESTful风格的控制器
1.)@RestController
在Spring Boot中,可以通过使用@RestController
注解来创建RESTful风格的控制器。
特定如下:
1.它结合了@Controller
和@ResponseBody
注解,不需要再为每个方法都添加@ResponseBody
注解。
2.默认返回JSON格式数据
3.支持多种HTTP方法:@RestController
注解支持处理多种HTTP方法,如GET、POST、PUT、DELETE等,可以通过不同的方法来实现对资源的不同操作
使用@RestController
注解的示例:
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
// 处理获取用户列表的逻辑
// 返回用户列表数据
return userService.getUsers();
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 处理创建用户的逻辑
// 返回创建的用户对象
return userService.createUser(user);
}
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// 处理根据用户ID获取用户的逻辑
// 返回用户对象
return userService.getUserById(id);
}
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
// 处理更新用户信息的逻辑
// 返回更新后的用户对象
return userService.updateUser(id, user);
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
// 处理删除用户的逻辑
userService.deleteUser(id);
}
}
以上示例中,@RestController
注解标识了一个RESTful风格的控制器,通过不同的HTTP方法(如GET、POST、PUT、DELETE)来处理用户资源的不同操作,并通过@RequestBody
和@PathVariable
注解来获取请求参数和路径参数,通过方法的返回值来返回RESTful响应给客户端。
2)RequestMapping在类上
@RequestMapping
是Spring Boot中用于定义HTTP请求映射的注解。
当@RequestMapping
注解应用在类上时,它用于定义该类中所有处理HTTP请求的方法的公共URL前缀。
以下是一个示例展示了类级别的@RequestMapping
注解的用法:
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
public List<User> getUsers() {
// 处理获取用户列表的逻辑
// 返回用户列表数据
return userService.getUsers();
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
// 处理根据用户ID获取用户的逻辑
// 返回用户对象
return userService.getUserById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
// 处理创建用户的逻辑
// 返回创建的用户对象
return userService.createUser(user);
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
// 处理更新用户信息的逻辑
// 返回更新后的用户对象
return userService.updateUser(id, user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
// 处理删除用户的逻辑
userService.deleteUser(id);
}
}
在上面的示例中,@RequestMapping("/api/users")
注解在UserController
类上定义了一个URL前缀/api/users
,它将添加到该类中所有处理HTTP请求的方法的URL映射上。例如,getUsers()
方法的完整URL将变成/api/users
,getUserById(Long id)
方法的完整URL将变成/api/users/{id}
,依此类推。这样,所有这些方法都共享相同的URL前缀,使得控制器类的代码更加简洁和可维护。
3)RequestMapping在方法上
RequestMapping注解在方法上主要是用于在Spring MVC,SpringBoot更多不采用该方法,这里拿出来用于对比在类上,了解即可。
以下是 @RequestMapping
在方法中的用法示例:
@RestController
@RequestMapping("/api")
public class MyController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "Hello World!";
}
@RequestMapping(value = "/greet", method = RequestMethod.GET)
public String greet(@RequestParam("name") String name) {
return "Hello, " + name + "!";
}
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public User getUser(@PathVariable("id") Long id) {
// 根据 id 查询用户信息并返回
// ...
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public User createUser(@RequestBody User user) {
// 创建新用户并返回用户信息
// ...
}
}
参数的详解
value
属性用于指定请求的 URL 路径,可以包含占位符{}
表示路径参数,例如/user/{id}
。method
属性用于指定请求的 HTTP 方法,可以使用RequestMethod
枚举值,例如RequestMethod.GET
、RequestMethod.POST
等。@RequestParam
注解用于获取请求中的查询参数,例如name
参数。@PathVariable
注解用于获取请求中的路径参数,例如id
参数。@RequestBody
注解用于将请求体中的 JSON 或 XML 数据绑定到方法参数,例如user
参数。
4)@RequestParam
@RequestParam
:用于获取请求中的查询参数。可以在方法参数上使用
例:
@GetMapping("/greet")
public String greet(@RequestParam("name") String name) {
return "Hello, " + name + "!";
}
上面的例子中,@RequestParam("name")
表示从请求中获取名为 name
的查询参数,并将其值绑定到 name
方法参数上。
5)@PathVariable
@PathVariable
: 用于获取请求中的路径参数。可以在方法参数上使用
例:
@GetMapping("/user/{id}")
public Long getUser(@PathVariable("id") Long id) {
return id;
}
上面的例子中,@PathVariable("id")
表示从请求中获取名为 id
的路径参数,并将其值绑定到 id
方法参数上。
6)@RequestBody
@RequestBody
: 用于将请求体中的 JSON、XML 等数据绑定到方法参数。可以在方法参数上使用 @RequestBody
注解
例
@PostMapping("/user")
public User createUser(@RequestBody User user) {
// 创建新用户并返回用户信息
// ...
}
上面的例子中,@RequestBody
表示从请求体中获取 JSON 或 XML 数据,并将其转换成 User
对象,然后绑定到 user
方法参数上。
7)不能用@RequestBody注解的情况
1.GET 请求:由于 GET 请求通常不包含请求体,因此在处理 GET 请求时,一般不使用 @RequestBody
注解,而是通过 URL 参数或查询参数来传递数据。
如果使用服务器会报错,一般采用@RequestParams或者@@PathVariable传递参数
例@RequestParams:
@GetMpping("/user")
public User getUser(@RequestParam("id") Long id) {
// 根据 id 获取用户信息并返回
// ...
}
2.文件上传:文件上传时使用@RequestBody会服务器异常,通常使用@RequestParam
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
// 处理文件上传逻辑
// ...
}
3.表单提交:对于表单提交功能,通常也不使用 @RequestBody
注解,而是使用 @RequestParam
注解来接收表单中的字段值。
@PostMapping("/user")
public User createUser(@RequestParam("name") String name, @RequestParam("age") int age) {
// 创建新用户并返回用户信息
// ...
}
总之,@RequestBody可以说是简化了@RequestParam的使用,不用一个个去获取前端传来的参数,而是采用对象封装,后端直接get/set。但有些特殊情况无法使用时,就只能使用@RequestParam一个一个慢慢的从前端获取参数。