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

Controller/RestController的区别

  • 📌 博主简介: 💻 努力学习的 23 级科班生一枚 🚀
  • 🏠 博主主页 : 📎 @灰阳阳
  • 📚 往期回顾 :一、二维差分模板
  • 💬 每日一言“你有能力这样做,才有权力这样做”

    文章目录

        • 1. @Controller 注解
        • 2. @RestController 注解
        • 3. 选择使用哪一个?

1. @Controller 注解

@Controller是传统的Spring MVC控制器注解,主要用于返回视图页面。当你使用@Controller时,通常需要结合模板引擎(如Thymeleaf、JSP等)来生成动态HTML页面,或者重定向到其他页面。
关键点:

  • 视图解析: 方法返回的是视图名称(比如页面模板的名称),而不是直接的数据。
  • 灵活性: 如果你需要返回JSON数据,也可以在方法上添加@ResponseBody注解,但这样就相当于混用了两种风格。

示例代码:

@Controller
public class MyController {
    
    //方法1
    @RequestMapping("/hello")
    public String hello(Model model) {
        // 向页面传递数据
        model.addAttribute("message", "Hello, Spring MVC!");
        // 返回视图名称(对应的模板文件,比如 hello.html 或 hello.jsp)
        return "hello";
    }

	  //方法二
      // 直接跳转到login.html页面
    @RequestMapping("/login")
    public String welcomePage() {
        // 返回视图名称,对应资源文件比如 welcome.html 或 welcome.jsp
        return "redirect:/login.html";
    }
    
 	//方法三
 	// 如果你想在@Controller中直接返回JSON数据,需要使用@ResponseBody
    @RequestMapping("/data")
    @ResponseBody
    public Map<String, String> data() {
        Map<String, String> result = new HashMap<>();
        result.put("message", "This is a JSON response");
        return result;
    }
}
  • 方法一:将其解析为视图名称
  • 方法二:直接重定向到指定页面。(redirect:/ 后的文件必须在static目录下,否则前端会报错:404!)
  • 方法三:则通过@ResponseBody可以自动把对象转换成JSON数据。这样做虽然灵活,但每个需要返回JSON的方法都必须手动添加@ResponseBody(也可以直接返回字符串)

2. @RestController 注解

@RestController是专为构建RESTful API而设计的,它的本质其实是@Controller和@ResponseBody的结合体。

@RestController = @Controller + ResponseBody

优势:
使用@RestController后,所有方法默认都返回数据,而不是视图页面。这在构建前后端分离的应用或API服务时非常方便。

美中不足:
当使用@RestController后,此注解下的方法都不能解析视图界面了,只能返回数据。

关键点:

  • 自动序列化: 方法返回的对象会自动转换为JSON(或XML,视配置而定)。
  • 简化开发: 不需要在每个方法上都添加@ResponseBody,减少了重复代码。
  • 明确语义: 当接口的主要目的是提供数据服务时,@RestController能够更准确地表达开发者的意图。

示例代码:

@RestController
public class MyRestController {
    
    @RequestMapping("/greet")
    public Map<String, String> greet() {
        Map<String, String> result = new HashMap<>();
        result.put("message", "Hello, RESTful API!");
        return result;
    }
}

上面的代码中,我们只需要使用@RestController,方法返回的Map对象会被自动转换成JSON格式输出,开发者不需要额外标注@ResponseBody。


3. 选择使用哪一个?

  • 使用@Controller:

    • 当应用需要返回视图(HTML页面)时。
    • 当你的项目中既有页面渲染也有数据接口时,可以分情况选择在对应方法上添加@ResponseBody。
  • 使用@RestController:

    • 当你的应用主要提供RESTful API接口,数据交互占主导地位时。
    • 开发前后端分离项目时,使用@RestController可以简化代码和维护成本。

相关文章:

  • 支持多个和可选参数
  • 【WPF】c#读取CAD的dxf文件,并基于Canvas将读取到的数据重新描绘到界面
  • Unity URP 实现场景和UI添加后处理
  • Java 反射详细教程
  • 数据可视化(matplotlib)-------辅助图标的设置
  • 早餐 3.20
  • 笔记:代码随想录算法训练营day57:99.岛屿数量 深搜、岛屿数量 广搜、100.岛屿的最大面积
  • ssh连接解析时间过长如何解决
  • 模块、包和库
  • 【day16】搭建测试环境数据库
  • uni-app基础问题(一)
  • SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace
  • Linux线程操作(创建,终止,等待,分离)
  • 基于STM32电子钟闹钟数码管显示设计(Proteus仿真+程序+设计报告+原理图PCB+讲解视频)
  • 二分查找的应用
  • numpy学习笔记3:三维数组 np.ones((2, 3, 4)) 的详细解释
  • 汽车相关液体介绍
  • MinIO Docker
  • Linux性能监控工具nmon安装及使用
  • 3.20-1ui自动化切换,登录退出
  • 上博东馆常设陈列入选全国博物馆“十大精品”
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿元
  • 一个留美学生的思想转向——裘毓麐的《游美闻见录》及其他
  • 学者三年实地调查被判AI代笔,论文AI率检测如何避免“误伤”
  • 乌克兰谈判代表团由12人组成,乌防长率领
  • 泽连斯基与埃尔多安会面,称已决定派遣代表团前往伊斯坦布尔