首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Spring Boot 简介
Spring Boot 的优点
Spring Boot 的开发环境搭建
Maven的安装和使用
Spring Boot 核心概念
Spring Boot 的自动配置
Spring Boot 的起步依赖
Spring Boot 的配置文件详解
Spring Boot 的注解详解
Spring Boot 的Web模块介绍
SpringBoot中Controller的使用
Spring Boot中的RESTful API的设计
Spring Boot中实现接收和发送JSON数据
Spring Boot实现文件上传和下载
Spring Boot与Thymeleaf模板引擎整合
Spring Boot与Vue.js整合
Spring Boot的JDBC模块详解
Spring Boot与MyBatis的整合
Spring Boot数据库事务的处理
Spring Boot数据库连接池的配置
Spring Boot的缓存模块
Spring Boot的日志管理
Spring Boot的打包和部署
当前位置:
首页>>
技术小册>>
SpringBoot零基础到实战
小册名称:SpringBoot零基础到实战
控制器(Controller)是一个Java类,通常用于处理Web请求并将响应返回给客户端。在本文中,我们将详细介绍Spring Boot中Controller的使用。 **基本概念** Controller是Spring MVC框架中的一种特殊的Bean,它用于处理来自客户端的HTTP请求。在Spring Boot中,控制器通常被定义为一个@RestController注解的类,其中@RestController是@Controller和@ResponseBody的组合注解。 @Controller:用于将一个Java类声明为Spring MVC控制器。 @ResponseBody:用于将控制器方法返回的对象转换为指定的格式,并将其作为HTTP响应的正文返回给客户端。 @RestController:@RestController注解将上述两个注解组合在一起,使其更方便使用。 **基本用法** 控制器方法是处理HTTP请求的核心部分。在Spring Boot中,控制器方法通常通过@RequestMapping注解定义。RequestMapping注解用于将HTTP请求映射到控制器的处理方法上。RequestMapping注解可以用在类级别和方法级别上。 类级别:指定映射的根路径,对所有方法有效。 方法级别:指定映射的具体路径,对该方法有效。 RequestMapping注解有多个属性,其中最常用的是value和method。 value:指定请求路径,可以是一个或多个路径,支持Ant风格的路径模式。 method:指定请求方法,可以是GET、POST、PUT、DELETE等。 示例代码: ```asp @RestController @RequestMapping("/api") public class UserController { @GetMapping("/users") public List<User> getUsers() { // 获取用户列表 } @GetMapping("/users/{id}") public User getUserById(@PathVariable Long id) { // 根据id获取用户信息 } @PostMapping("/users") public void addUser(@RequestBody User user) { // 添加用户 } @PutMapping("/users/{id}") public void updateUser(@PathVariable Long id, @RequestBody User user) { // 根据id更新用户信息 } @DeleteMapping("/users/{id}") public void deleteUser(@PathVariable Long id) { // 根据id删除用户 } } ``` 上述示例代码定义了一个名为UserController的控制器,它映射到/api路径下。其中,@GetMapping、@PostMapping、@PutMapping、@DeleteMapping注解分别对应HTTP请求的GET、POST、PUT、DELETE方法,用于处理不同的请求。例如,@GetMapping("/users")指定了处理GET方法和/api/users路径的请求,@PostMapping("/users")指定了处理POST方法和/api/users路径的请求。 **参数绑定** 控制器方法通常需要从HTTP请求中获取参数。Spring Boot提供了多种方式将参数绑定到控制器。 **1.@RequestParam绑定参数** @RequestParam注解可以将请求参数绑定到控制器方法的参数上,如下所示: ```asp @GetMapping("/user") public String getUser(@RequestParam("id") Long userId, Model model) { User user = userService.getUserById(userId); model.addAttribute("user", user); return "user"; } ``` 在上面的例子中,@RequestParam("id")将请求参数中名为"id"的参数绑定到控制器方法的userId参数上。 除了指定请求参数名之外,还可以设置参数默认值、是否必需等属性,例如: ```asp @GetMapping("/users") public String getUsers(@RequestParam(value = "page", defaultValue = "1") int page,@RequestParam(value = "size", required = false) Integer size,Model model) { Page<User> users = userService.getUsersByPage(page, size); model.addAttribute("users", users); return "users"; } ``` 在上面的例子中,defaultValue = "1"将参数page的默认值设置为1,而required = false表示参数size是可选的。 **2.@PathVariable绑定路径变量** @PathVariable注解可以将URL路径变量绑定到控制器方法的参数上,例如: ```asp @GetMapping("/users/{id}") public String getUserById(@PathVariable Long id, Model model) { User user = userService.getUserById(id); model.addAttribute("user", user); return "user"; } ``` 在上面的例子中,@PathVariable Long id将URL路径中的{id}变量绑定到控制器方法的id参数上。 **3.@RequestBody绑定请求体** @RequestBody注解可以将HTTP请求体绑定到控制器方法的参数上,如下所示: ```asp @PostMapping("/user") public User createUser(@RequestBody User user) { return userService.saveUser(user); } ``` **4. @RequestHeader绑定请求头** @RequestHeader注解可以将HTTP请求头绑定到控制器方法的参数上,例如: ```asp @GetMapping("/users") public String getUsers(@RequestHeader("User-Agent") String userAgent, Model model) { List<User> users = userService.getUsers(); model.addAttribute("users", users); model.addAttribute("userAgent", userAgent); return "users"; } ``` 在上面的例子中,@RequestHeader("User-Agent")将HTTP请求头中的User-Agent信息绑定到控制器方法的userAgent参数上。 **5.@ModelAttribute绑定模型属性** @ModelAttribute注解可以将请求参数绑定到模型属性上,例如: ```asp @ModelAttribute("user") public User getUser(@RequestParam("id") Long id) { return userService.getUserById(id); } @GetMapping("/users/{id}") public String getUserById(@PathVariable Long id) { return "user"; } ``` **RESTful风格的控制器** 在Spring Boot中,我们通常会使用RESTful风格的控制器来处理HTTP请求,这种风格的控制器具有以下特点: 使用HTTP请求方法(GET, POST, PUT, DELETE等)来表示操作类型 使用URL路径来表示资源路径 使用HTTP请求体来传递参数 以下是一个示例控制器,它处理了两个GET请求,并返回JSON格式的数据: ```asp @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/") public List<User> getAllUsers() { return userService.getAllUsers(); } @GetMapping("/{id}") public User getUserById(@PathVariable Long id) { return userService.getUserById(id); } } ``` 在这个控制器中,我们使用了@RestController注解来标识这是一个RESTful风格的控制器,同时使用@RequestMapping注解来指定控制器的URL路径前缀为/users。 然后,我们定义了两个方法来处理GET请求。@GetMapping("/")指定了处理URL为/users/的GET请求的方法,它会调用userService.getAllUsers()方法来获取所有用户列表,并返回一个包含所有用户的JSON数组。 @GetMapping("/{id}")指定了处理URL为/users/{id}的GET请求的方法,它会调用userService.getUserById(id)方法来获取指定ID的用户,并返回一个包含该用户信息的JSON对象。其中,@PathVariable注解表示该参数从URL路径中获取。 **控制器的参数绑定** 在处理HTTP请求时,我们通常需要从请求中获取参数来进行相应的操作。Spring Boot提供了多种方式来实现控制器参数的绑定,包括: - @RequestParam注解:用于获取请求参数的值 - @PathVariable注解:用于获取路径变量的值 - @RequestBody注解:用于获取HTTP请求体的值 - @RequestHeader注解:用于获取HTTP请求头的值 以下是一个示例控制器,它演示了如何使用@RequestParam注解来获取请求参数: ```asp @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/") public List<User> getAllUsers(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { return userService.getUsersByPage(page, size); } } ``` 在这个控制器中,我们定义了一个getAllUsers方法来处理GET请求,并使用@RequestParam注解来获取请求中的两个参数:page和size。其中,defaultValue属性指定了当请求中不包含这些参数时的默认值。 **控制器的返回值处理** 在Spring Boot中,控制器的返回值可以是任意类型的对象。Spring Boot会根据对象的类型和注解来自动转换成对应的HTTP响应,例如将一个Java对象转换成JSON格式的字符串并返回给客户端。 以下是Spring Boot控制器返回值的处理方式: **返回String类型** 如果控制器方法返回String类型,Spring Boot会将其作为视图名称,并根据该名称找到对应的视图。例如,以下代码演示了如何返回一个JSP视图: ```asp @GetMapping("/greeting") public String greeting(Model model) { model.addAttribute("name", "Alice"); return "greeting"; } ``` 在上面的代码中,控制器方法返回"greeting"字符串,Spring Boot会查找名为"greeting.jsp"的视图,并将Model对象中的属性传递给该视图。 **返回对象** 如果控制器方法返回一个对象,Spring Boot会将其转换为JSON格式并将其作为响应正文返回给客户端。例如,以下代码演示了如何返回一个User对象: ```asp @GetMapping("/user/{id}") public User getUser(@PathVariable Long id) { return userRepository.findById(id); } ``` 在上面的代码中,控制器方法返回一个User对象,Spring Boot会将其转换为JSON格式并返回给客户端。 **返回ResponseEntity** 如果控制器方法需要更细粒度的控制HTTP响应,可以返回一个ResponseEntity对象。ResponseEntity包含响应正文、HTTP状态码和HTTP头部信息。例如,以下代码演示了如何返回一个HTTP状态码为404的响应: ```asp @GetMapping("/user/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) { User user = userRepository.findById(id); if (user == null) { return ResponseEntity.notFound().build(); } else { return ResponseEntity.ok(user); } } ``` 在上面的代码中,如果找不到ID为{id}的用户,则返回一个HTTP状态码为404的响应;否则,返回HTTP状态码为200的响应,并将User对象作为响应正文。 **返回void** 如果控制器方法不需要返回任何内容,可以返回void类型。这种情况下,Spring Boot会尝试根据请求路径和HTTP方法来选择一个默认视图。例如,以下代码演示了如何在控制器方法中重定向到另一个URL: ```asp @PostMapping("/login") public void login(HttpServletRequest request, HttpServletResponse response, @RequestParam String username, @RequestParam String password) throws IOException { if (isValidUser(username, password)) { request.getSession().setAttribute("username", username); response.sendRedirect("/dashboard"); } else { response.sendRedirect("/login?error"); } } ``` 在上面的代码中,如果用户名和密码有效,则将用户重定向到"/dashboard" URL;否则,将用户重定向到"/login?error" URL。
上一篇:
Spring Boot 的Web模块介绍
下一篇:
Spring Boot中的RESTful API的设计
该分类下的相关小册推荐:
Mybatis合辑5-注解、扩展、SQL构建
Java语言基础13-类的加载和反射
Java语言基础9-常用API和常见算法
Java语言基础5-面向对象初级
Java必知必会-Maven高级
JAVA 函数式编程入门与实践
Java语言基础8-Java多线程
Java语言基础12-网络编程
Java语言基础3-流程控制
Java语言基础7-Java中的异常
Java性能调优实战
Java并发编程实战