REST 服务的出现是为了提供一种简单、灵活、可伸缩的分布式系统架构,使得各种应用和服务能够更加轻松地相互通信和协作。
在上一篇 【Spring实战】17 REST服务介绍 文章中介绍了 REST 服务出现就是为了提供了一种更加简单、灵活、基于标准的通信方式 ,REST 服务有着哪些优势,以及概况性总结在 Spring 中都有哪些应用,本篇文章将会对 REST 在 Spring 中的应用注解结合代码逐一详细说明。
如何使用:
@RestController
public class DemoController {
}
什么作用?
@RestController
注解是 Spring MVC 中的注解,它是 @Controller
和 @ResponseBody
的组合。它表示这个类是一个控制器,并且所有的方法返回的数据直接写入 HTTP 响应体,而不是通过视图解析器进行渲染。
如何使用:
@RequestMapping("demo")
public class DemoController {
}
什么作用?
@RequestMapping("demo")
: 这是一个类级别的注解,用于映射 HTTP 请求的 URL 到具体的控制器类。在这里,@RequestMapping("demo")
表示所有映射到这个控制器的请求路径都以 “/demo” 开头。
需要注意的是,这段代码中并没有包含具体的处理方法。通常,你会在这个类中添加一些带有 @RequestMapping
注解的方法,用于处理不同路径的请求,并实现相应的业务逻辑。
// 方式一
// 当访问路径 `http://localhost:8080/demo`
@RequestMapping
public String sayHello() {
return "Hello from DemoController!";
}
// 方式二
// 当访问路径 `http://localhost:8080/demo/hello`
@RequestMapping("hello")
public String sayHello() {
return "Hello from DemoController!";
}
这样,当访问路径时,sayHello
方法将被调用,就可以返回字符串 “Hello from DemoController!” 啦。
上面这两段代码,还可以用下面这段去替代,作用是一样的。
@RestController
public class DemoController {
@RequestMapping("demo")
public String sayHello() {
return "Hello from DemoController!";
}
}
如何使用:
@RestController
public class DemoController {
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
// ...
}
}
什么作用?
@RequestBody
注解表示这个方法将从请求体中读取数据,将其转换为 User
对象。
如何使用:
@RestController
public class DemoController {
@GetMapping("/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
// ...
}
}
什么作用?
@ResponseBody
注解: 这是 Spring MVC 框架的注解,它表明方法的返回值将直接写入 HTTP 响应体,而不是通过视图解析器进行渲染。在这里,@ResponseBody
用于将 User
对象序列化为 HTTP 响应的主体部分。
如何使用:
@RestController
public class DemoController {
@GetMapping
public ResponseEntity<String> handleParam(@RequestParam("name") String name) {
// ...
}
}
什么作用?
@RequestParam("name") String name
: 这是一个方法参数,用于接收名为 name
的请求参数。@RequestParam
注解用于将 HTTP 请求参数映射到方法的参数上,这里表示期望请求中包含名为 name
的参数,并将其映射到方法的 name
参数上。
如何使用:
@RestController
public class DemoController {
@GetMapping("/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
// ...
}
}
什么作用?
@PathVariable
注解表示这个方法从请求路径中提取一个变量,即id
。
如何使用:
@RestController
public class DemoController {
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void createUser(@RequestBody User user) {
// ...
}
}
什么作用?
@ResponseStatus(HttpStatus.CREATED)
是 Spring MVC 框架的注解,用于指定控制器方法的默认 HTTP 响应状态码。在这里,@ResponseStatus(HttpStatus.CREATED)
表示方法成功执行时,将返回 HTTP 状态码 201 Created
。
如何使用:
@RestController
public class DemoController {
@GetMapping
public ResponseEntity<String> handleHeader(@RequestHeader("User-Agent") String userAgent) {
// ...
}
}
什么作用?
@RequestHeader("User-Agent")
: 这是一个方法参数级别的注解,用于告诉 Spring MVC 从 HTTP 请求头中提取 “User-Agent” 的值。"User-Agent"
是一个标准的 HTTP 请求头,通常包含了客户端发起请求时使用的用户代理(User Agent)信息,用于标识客户端的类型和版本。String userAgent
: 这是方法的一个参数,表示提取到的 “User-Agent” 头的值将会被赋给这个参数。在方法的执行过程中,你可以使用这个参数来获取客户端的用户代理信息。如何使用:
@RestController
public class DemoController {
@GetMapping("/{id}")
public ResponseEntity<String> getUserById(@PathVariable Long id) {
// ...
}
}
什么作用?
getUserById
方法使用了 @GetMapping("/{id}")
注解,表示它将处理形如 /users/109
这样的GET请求,其中 109
将被映射到方法参数 id
中。该方法在内部处理获取用户信息的业务逻辑。
如何使用:
@RestController
public class DemoController {
@PostMapping
public ResponseEntity<String> createUser(@RequestBody User user) {
// ...
}
}
什么作用?
createUser
方法使用了 @PostMapping
注解,表示它将处理HTTP POST请求。该方法在内部处理创建用户的业务逻辑。
如何使用:
@RestController
public class DemoController {
@DeleteMapping("/{id}")
public ResponseEntity<String> deleteUser(@PathVariable Long id) {
// ...
}
}
什么作用?
deleteUser
方法使用了 @DeleteMapping("/{id}")
注解,表示它将处理形如 /users/109
这样的DELETE请求,其中 109
将被映射到方法参数 id
中。该方法在内部处理删除用户的业务逻辑。
如何使用:
@RestController
public class DemoController {
@PutMapping("/{id}")
public ResponseEntity<String> updateUser(@PathVariable Long id, @RequestBody User user) {
// ...
}
}
什么作用?
updateUser
方法使用了 @PutMapping("/{id}")
注解,表示它将处理形如 /users/109
这样的PUT请求,其中 109
将被映射到方法参数 id
中。该方法在内部处理更新用户的业务逻辑。
如何使用:
@RestController
public class DemoController {
@PatchMapping("/{id}")
public ResponseEntity<String> partiallyUpdateUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
// ...
}
}
什么作用?
partiallyUpdateUser
方法使用了 @PatchMapping("/{id}")
注解,表示它将处理形如 /users/109
这样的 PATCH 请求,其中 109
将被映射到方法参数 id
中。该方法在内部处理部分更新用户信息的业务逻辑。
如何使用:
@RestController
public class DemoController {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleUserCreateFailed(Exception ex) {
// ...
}
}
什么作用?
@ExceptionHandler(Exception.class)
: 这是 Spring MVC 框架的注解,表示该方法将处理在控制器中抛出的特定类型的异常。在这里使用的 Exception.class
可以替换成我们想要捕获的其他异常,也包括自定义异常
这些都是我们在写 Web 项目经常用到的注解,有了它们之后就可以简单的灵活的开发 Web 应用程序啦。