Spring @RestController
介绍
在 Spring 框架中,@RestController
是一个用于构建 RESTful Web 服务的注解。它是 @Controller
和 @ResponseBody
的组合,简化了 REST API 的开发。通过使用 @RestController
,你可以轻松地将 Java 对象转换为 JSON 或 XML 格式,并将其作为 HTTP 响应返回给客户端。
@RestController
是 Spring 4.0 引入的注解,专为构建 RESTful 服务而设计。
基本用法
1. 创建一个简单的 REST 控制器
以下是一个使用 @RestController
的简单示例:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HelloWorldController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}
在这个示例中,@RestController
注解标记了 HelloWorldController
类,表示它是一个 REST 控制器。@RequestMapping("/api")
指定了该控制器的根路径为 /api
,而 @GetMapping("/hello")
则定义了一个处理 GET 请求的方法。
2. 运行并测试
当你启动 Spring Boot 应用程序并访问 http://localhost:8080/api/hello
时,你将看到以下输出:
Hello, World!
确保你的 Spring Boot 应用程序已经正确配置并运行在默认端口 8080
上。
逐步讲解
1. @RestController
的作用
@RestController
注解的作用是将类标记为一个 REST 控制器。它结合了 @Controller
和 @ResponseBody
的功能:
@Controller
:将类标记为 Spring MVC 控制器。@ResponseBody
:将方法的返回值直接写入 HTTP 响应体,而不是渲染视图。
2. 处理不同的 HTTP 方法
除了 @GetMapping
,Spring 还提供了其他注解来处理不同的 HTTP 方法,例如:
@PostMapping
:处理 POST 请求。@PutMapping
:处理 PUT 请求。@DeleteMapping
:处理 DELETE 请求。
以下是一个处理 POST 请求的示例:
@PostMapping("/greet")
public String greet(@RequestParam String name) {
return "Hello, " + name + "!";
}
3. 返回复杂对象
@RestController
不仅可以返回简单的字符串,还可以返回复杂的 Java 对象。Spring 会自动将这些对象转换为 JSON 或 XML 格式。
@GetMapping("/user")
public User getUser() {
return new User("John", "Doe");
}
假设 User
类如下:
public class User {
private String firstName;
private String lastName;
// 构造函数、getter 和 setter 省略
}
访问 http://localhost:8080/api/user
将返回以下 JSON:
{
"firstName": "John",
"lastName": "Doe"
}
实际案例
1. 构建一个简单的用户管理系统
假设我们需要构建一个简单的用户管理系统,支持以下功能:
- 获取所有用户
- 添加新用户
- 根据 ID 获取用户
- 删除用户
以下是实现代码:
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
@RestController
@RequestMapping("/users")
public class UserController {
private final List<User> users = new ArrayList<>();
private final AtomicLong counter = new AtomicLong();
@GetMapping
public List<User> getAllUsers() {
return users;
}
@PostMapping
public User addUser(@RequestBody User user) {
user.setId(counter.incrementAndGet());
users.add(user);
return user;
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return users.stream()
.filter(user -> user.getId().equals(id))
.findFirst()
.orElseThrow(() -> new RuntimeException("User not found"));
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
users.removeIf(user -> user.getId().equals(id));
}
}
2. 测试 API
你可以使用 Postman 或 curl 命令来测试这些 API:
- 获取所有用户:
GET http://localhost:8080/users
- 添加新用户:
POST http://localhost:8080/users
,请求体为{"firstName": "John", "lastName": "Doe"}
- 根据 ID 获取用户:
GET http://localhost:8080/users/1
- 删除用户:
DELETE http://localhost:8080/users/1
总结
@RestController
是 Spring 框架中用于构建 RESTful Web 服务的强大工具。通过本文,你已经学会了如何使用 @RestController
创建简单的 REST API,并处理不同的 HTTP 方法。我们还通过一个实际案例展示了如何构建一个用户管理系统。
在实际开发中,请确保处理异常情况,例如用户未找到或请求参数无效。
附加资源
练习
- 扩展用户管理系统,支持更新用户信息(使用
@PutMapping
)。 - 尝试返回自定义的 HTTP 状态码,例如
201 Created
或404 Not Found
。 - 使用
@ExceptionHandler
处理自定义异常,并返回适当的错误信息。
祝你学习愉快!