当前位置: 首页 > news >正文

What is `@Controller` does?

@ControllerSpringMVC注解,标记一个类作为Web控制器(Controller),负责处理HTTP请求并返回响应结果

SpringMVC中,控制器类的主要职责是:
1、接收来自客户端的HTTP请求
2、调用服务层或其他业务逻辑组件
3、根据操作结果准备视图模型数据(Model),将控制权转移给视图解析器(View Resolver)渲染视图
4、操作结果直接返回HTTP响应(例如JSON、XML等)。

使用样例

简单页面渲染

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class SimplePageController {@GetMapping("/hello")public String displayHelloPage() {// ...return "hello"; // 假设有一个名为"hello.html"的模板文件在视图解析器配置的路径下}
}

结合ModelAndView对象使用

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class UserViewController {@GetMapping("/users/{id}")public ModelAndView showUser(@PathVariable Long id, Model model) {// 假设userService.find(id)获取用户信息User user = userService.find(id);// 将用户信息添加到模型中供视图模板使用model.addAttribute("user", user);// 返回包含视图名称和模型数据的ModelAndView对象return new ModelAndView("user-profile", model.asMap());}
}

处理POST请求并返回重定向

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;@Controller
@RequestMapping("/login")
public class LoginController {@GetMappingpublic String showLoginForm() {// 显示登录表单页面return "login";}@PostMappingpublic String processLogin(@RequestParam("username") String username,@RequestParam("password") String password,RedirectAttributes redirectAttrs) {// 假设userService.authenticate(username, password)进行身份验证if (userService.authenticate(username, password)) {// 登录成功,重定向到主页redirectAttrs.addFlashAttribute("successMessage", "Welcome, you have successfully logged in!");return "redirect:/home";} else {// 登录失败,将错误信息添加到模型中以便在重定向后的页面显示redirectAttrs.addFlashAttribute("errorMessage", "Invalid credentials. Please try again.");return "redirect:/login";}}
}

结合@RequestBody处理JSON数据

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@PostMapping("/users")public ResponseEntity<User> createUser(@RequestBody CreateUserRequest request) {User user = userService.createUser(request.getName(), request.getEmail());return ResponseEntity.ok(user);}static class CreateUserRequest {private String name;private String email;// getters and setters}
}

相关文章:

  • Kali Linux保姆级教程|零基础从入门到精通,看完这一篇就够了!(附工具包)
  • 圈小猫游戏HTML源码
  • Docker之网络配置的使用
  • iOS UI掉帧和卡顿优化解决方案记录
  • 导入失败,报错:“too many filtered rows xxx, “ErrorURL“:“
  • 自学网络安全(黑客)笔记
  • http跟https有什么区别?
  • 4、Redis高并发分布式锁实战
  • Linux下安装jdk、tomcat
  • ChatGPT 和 文心一言 的优缺点及需求和使用场景
  • 1.6计算机网络的性能指标
  • IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理?
  • 网络安全中的“三高一弱”和“两高一弱”是什么?
  • 推荐3个wordpress模板网站
  • 基于opencv的直线检测(pythonC++)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Android单元测试 - 几个重要问题
  • Docker: 容器互访的三种方式
  • Effective Java 笔记(一)
  • export和import的用法总结
  • IDEA常用插件整理
  • Python利用正则抓取网页内容保存到本地
  • Rancher如何对接Ceph-RBD块存储
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SpringBoot几种定时任务的实现方式
  • 初识MongoDB分片
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 动态魔术使用DBMS_SQL
  • 经典排序算法及其 Java 实现
  • 码农张的Bug人生 - 初来乍到
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 异步
  • postgresql行列转换函数
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (42)STM32——LCD显示屏实验笔记
  • (办公)springboot配置aop处理请求.
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)hibernate配置管理
  • (附源码)计算机毕业设计ssm电影分享网站
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net web项目 调用webService
  • .net(C#)中String.Format如何使用
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET中的Exception处理(C#)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Transactional 详解
  • [ C++ ] STL---stack与queue
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬