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服务和用户体验。

相关文章
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
20天前
|
前端开发 开发者
WEB自定义页面请求响应
Web组件支持在应用拦截到页面请求后自定义响应请求能力。开发者通过onInterceptRequest()接口来实现自定义资源请求响应 。自定义请求能力可以用于开发者自定义Web页面响应、自定义文件资源响应等场景。
22 0
|
1月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
125 0
|
1月前
|
NoSQL Java 数据库连接
springBoot:整合其他框架&condition&切换web配置 (五)
本文档介绍了如何在Spring Boot项目中整合JUnit、Redis和MyBatis等框架,并提供了相应的依赖配置示例。同时,还展示了如何通过条件注解实现Bean的条件创建,以及如何切换Web服务器配置,从默认的Tomcat切换到Jetty。
|
2月前
|
SQL 存储 安全
Web安全-CSRF跨站请求伪造
Web安全-CSRF跨站请求伪造
81 5
|
3月前
|
Java Spring Apache
Spring Boot邂逅Apache Wicket:一次意想不到的完美邂逅,竟让Web开发变得如此简单?
【8月更文挑战第31天】Apache Wicket与Spring Boot的集成提供了近乎无缝的开发体验。Wicket以其简洁的API和强大的组件化设计著称,而Spring Boot则以开箱即用的便捷性赢得开发者青睐。本文将指导你如何在Spring Boot项目中引入Wicket,通过简单的步骤完成集成配置。首先,创建一个新的Spring Boot项目并在`pom.xml`中添加Wicket相关依赖。
95 0
|
3月前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
66 0
|
3月前
|
Java 前端开发 Spring
技术融合新潮流!Vaadin携手Spring Boot、React、Angular,引领Web开发变革,你准备好了吗?
【8月更文挑战第31天】本文探讨了Vaadin与Spring Boot、React及Angular等主流技术栈的最佳融合实践。Vaadin作为现代Java Web框架,与其他技术栈结合能更好地满足复杂应用需求。文中通过示例代码展示了如何在Spring Boot项目中集成Vaadin,以及如何在Vaadin项目中使用React和Angular组件,充分发挥各技术栈的优势,提升开发效率和用户体验。开发者可根据具体需求选择合适的技术组合。
73 0
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
101 3
|
16天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
103 45