Spring Boot之Controller控制器:实现Web请求处理与业务逻辑分离

简介: 本篇详细介绍了Spring Boot中的Controller控制器的作用、用法和最佳实践。Controller是负责处理Web请求和响应的核心组件,能够将前端的HTTP请求映射到相应的业务逻辑处理,并返回适当的响应。通过一个简单的示例,展示了如何创建和配置Controller,并使用不同类型的注解来映射请求。还介绍了如何处理请求参数、路径变量,并展示了Controller方法返回不同类型的数据和视图的方式。通过学习本文内容,读者可以更好地理解和使用Spring Boot中的Controller,从而构建出灵活、高效的Web应用,提供优质的用户体验。

概述

在Spring Boot应用中,Controller是负责处理Web请求和响应的核心组件之一。它充当了应用程序的入口点,将来自前端的请求映射到相应的业务逻辑处理,并返回适当的响应。本篇技术长博文将深入探讨Spring Boot中的Controller控制器的作用、用法和最佳实践,并通过代码示例演示如何构建和使用Controller来实现灵活的Web请求处理。

1. Controller基本概念

Controller是Spring MVC框架的一部分,用于处理来自客户端的HTTP请求,并将其映射到相应的处理方法。Controller的主要目标是将Web请求与应用程序的业务逻辑分离,从而提高代码的可维护性和扩展性。
SpringBoot 提供了两种@controller和@restController注解负责接收处理HTTP请求
@Controller

请求页面
前端${name}接收后端数据
通常与Thymeleaf模板引擎配合使用

@RestController

请求数据
对象数据转Json数据

2. 创建一个简单的Controller

步骤1:创建Spring Boot项目

在IDE中创建一个新的Spring Boot项目,确保已包含Web依赖。

步骤2:编写Controller类

@RestController
public class HelloWorldController {
   

    @GetMapping("/hello")
    public String hello() {
   
        return "Hello, Spring Boot!";
    }
}

步骤3:运行应用

运行Spring Boot应用并访问http://localhost:8080/hello,将看到页面上显示"Hello, Spring Boot!"。

3. Controller的请求映射

Controller可以使用不同的注解来映射不同类型的请求,如@GetMapping@PostMapping@PutMapping@DeleteMapping等。通过这些注解,你可以将请求映射到相应的处理方法。

@RestController
public class UserController {
   

    @GetMapping("/users")
    public List<User> getAllUsers() {
   
        // 从数据库或其他数据源获取用户列表
        List<User> users = userRepository.getAllUsers();
        return users;
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
   
        // 创建新用户并保存到数据库
        User newUser = userRepository.createUser(user);
        return newUser;
    }
}

4. 请求参数和路径变量

Controller方法可以接受请求参数和路径变量,从而根据不同的参数值执行不同的逻辑。

@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
   
    // 根据用户ID从数据库获取用户信息
    User user = userRepository.getUserById(id);
    return user;
}

@GetMapping("/greet")
public String greet(@RequestParam(name = "name", defaultValue = "Guest") String name) {
   
    return "Hello, " + name + "!";
}

5. 返回数据与视图

Controller方法可以返回不同类型的数据,如字符串、JSON、视图模板等。

@GetMapping("/message")
public String getMessage() {
   
    return "Welcome to our website!";
}

@GetMapping("/user/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
   
    User user = userRepository.getUserById(id);
    if (user != null) {
   
        return ResponseEntity.ok(user);
    } else {
   
        return ResponseEntity.notFound().build();
    }
}

@GetMapping("/view")
public ModelAndView getView() {
   
    ModelAndView modelAndView = new ModelAndView("myView");
    modelAndView.addObject("message", "Hello from the view!");
    return modelAndView;
}

重点

路由映射

@RequestMapping注解负责URL路由映射
作用域:类或方法
value:请求URL路径
method:HTTP请求方法
consumes:请求的媒体类型(application/json)
produces:响应的媒体类型
params,headers:请求的参数及请求头的值
@RequestMapping(value=“getUser”,method=RequestMethod.GET)

@RequestMapping
@RequestMapping(“/getJson/*.json”)
/getJson/x.json、/getJson/y.json
“*”匹配任意字符(优先级高)
“**”匹配任意路径(优先级低)
“?”匹配单个字符

Method匹配

HTTP请求Method:GET、POST、PUT、DELETE等
@GetMapping、@PostMapping等

参数传递

@RequestParam
绑定在方法参数上
当请求参数名与Controller的业务方法名称一致时@RequestParam可省略
@RequestParam("nikename")String name

@PathVaraible
用来处理动态的URL、URL的值可以作为控制器中处理方法的参数
@GetMapping("/api/{id}")
public String api(@PathVaraible int id)

@RequestBody
请求体
application/json、application/xml

总结

Spring Boot的Controller控制器是实现Web请求处理与业务逻辑分离的关键组件。通过本文的介绍和示例,你已经了解了如何创建和配置Controller,并使用各种注解来映射不同类型的请求。此外,你还学会了如何处理请求参数和路径变量,以及如何返回不同类型的数据和视图。通过合理地设计和使用Controller,你可以构建出灵活、高效的Spring Boot应用,提供出色的Web服务和用户体验。

相关文章
|
10月前
|
缓存 安全 Java
《深入理解Spring》过滤器(Filter)——Web请求的第一道防线
Servlet过滤器是Java Web核心组件,可在请求进入容器时进行预处理与响应后处理,适用于日志、认证、安全、跨域等全局性功能,具有比Spring拦截器更早的执行时机和更广的覆盖范围。
|
10月前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
646 3
|
11月前
|
存储 安全 Java
如何在 Spring Web 应用程序中使用 @SessionScope 和 @RequestScope
Spring框架中的`@SessionScope`和`@RequestScope`注解用于管理Web应用中的状态。`@SessionScope`绑定HTTP会话生命周期,适用于用户特定数据,如购物车;`@RequestScope`限定于单个请求,适合无状态、线程安全的操作,如日志记录。合理选择作用域能提升应用性能与可维护性。
426 1
|
12月前
|
存储 NoSQL Java
探索Spring Boot的函数式Web应用开发
通过这种方式,开发者能以声明式和函数式的编程习惯,构建高效、易测试、并发友好的Web应用,同时也能以较小的学习曲线迅速上手,因为这些概念与Spring Framework其他部分保持一致性。在设计和编码过程中,保持代码的简洁性和高内聚性,有助于维持项目的可管理性,也便于其他开发者阅读和理解。
294 0
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
873 0
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
1217 5
|
Java 应用服务中间件 Spring
SpringBoot 响应请求是串行还是并行?
Spring Boot 在默认情况下通过 Servlet 容器的线程池实现并行处理 HTTP 请求。通过适当的线程池配置,可以进一步优化并发性能。此外,Spring Boot 提供了异步处理机制(如使用 `@Async` 注解)和反应式编程模型(Spring WebFlux),使得应用能够处理更高的并发负载。在具体项目中,可以根据需求选择合适的处理模型,以充分利用 Spring Boot 的并发处理能力。
630 21
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
1179 7
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
1173 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
XML Java 网络架构
使用 Spring Boot 公开 SOAP Web 服务端点:详细指南
使用 Spring Boot 公开 SOAP Web 服务端点:详细指南
1979 0