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

地基注解@Controller和@RestController区别

前记:基础啊,区别点重点理解;

在Spring和Spring Boot框架中,@Controller@RestController都用于处理HTTP请求,但它们在设计目的和用法上有显著区别。以下是它们的核心区别及示例说明:


1. 核心区别

特性@Controller@RestController
用途传统Web应用(返回视图名称)RESTful API(直接返回数据,如JSON/XML)
响应处理默认返回视图名称,需配合@ResponseBody返回数据自动将返回值序列化为HTTP响应体(内置@ResponseBody
视图解析器需要视图解析器(如JSP、Thymeleaf)不需要视图解析器,直接返回数据
组合注解@Controller + @ResponseBody

2. @Controller 用法示例

场景:传统Web应用,返回HTML视图。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class WebController {
    
    // 返回视图名称(由视图解析器处理,如Thymeleaf)
    @GetMapping("/home")
    public String home() {
        return "home"; // 对应src/main/resources/templates/home.html
    }

    // 需要显式添加@ResponseBody返回数据
    @GetMapping("/data")
    @ResponseBody
    public String getData() {
        return "Hello from @Controller!";
    }
}
说明
  • return "home":视图解析器会查找home.html模板并渲染。
  • @ResponseBody:强制将返回值作为响应体(不经过视图解析器)。

3. @RestController 用法示例

场景:REST API,直接返回JSON数据。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    // 自动将User对象序列化为JSON
    @GetMapping("/user")
    public User getUser() {
        return new User("Alice", 30);
    }

    // 直接返回字符串
    @GetMapping("/greeting")
    public String greeting() {
        return "Hello from @RestController!";
    }
}

// 简单POJO类
class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 省略getter/setter
}
说明
  • 所有方法默认使用@ResponseBody,返回值直接写入HTTP响应体。
  • 返回对象会被自动序列化为JSON(需Jackson库支持,Spring Boot默认包含)。

4. 关键总结

  • 使用@Controller

    • 适合需要服务端渲染的页面(如JSP、Thymeleaf)。
    • 若返回数据,必须配合@ResponseBody
  • 使用@RestController

    • 专为REST API设计,直接返回数据(无需视图解析)。
    • 简化代码,避免重复使用@ResponseBody

5. 常见HTTP方法注解

两者均可使用@GetMapping@PostMapping等快捷注解:

// 在@Controller或@RestController中均可使用
@PostMapping("/create")
public ResponseEntity<String> createUser(@RequestBody User user) {
    // 处理创建逻辑
    return ResponseEntity.ok("User created!");
}

通过合理选择@Controller@RestController,可以高效构建传统Web应用或现代RESTful API。

(望各位潘安、各位子健/各位彦祖、于晏不吝赐教!多多指正!🙏)

相关文章:

  • shiro反序列化漏洞-简述
  • 机试准备第15天
  • 办公常用自动化工具
  • 西瓜书简单笔记
  • 操作系统学习笔记-进程调度篇
  • 在线Doc/Docx转换为PDF格式 超快速转换的一款办公软件 文档快速转换 在线转换免费转换办公软件
  • STM32步进电机S型与T型加减速算法
  • 10进制转换成2进制
  • 编写Dockerfile制作tomcat镜像,生成镜像名为tomcat:v1,并推送到私有仓库。
  • Cursor初体验:excel转成CANoe的vsysvar文件
  • spring事务失效的12种场景
  • Deepseek -> 如何在PyTorch中合并张量
  • cesium安装与配置(visual studio版)
  • Linux运维篇-ubuntu22.04及以上版本操作系统配置静态IP
  • 如何搭建一个适配微信小程序,h5,app的工程
  • Matlab深度学习ResNet、迁移学习多标签图像分类及超分辨率处理Grad CAM可视化分析COCO、手写数字数据集...
  • 随机种子的使用
  • Maven工具基础知识(一)
  • 蓝桥杯 C++ b组李白打酒加强版,动规及dfs+记忆化搜索双解
  • 机器学习框架
  • 河南一县政府党组成员签订抵制违规吃喝问题承诺书,现场交给县长
  • 土耳其、美国、乌克兰三边会议开始
  • 美官方将使用华为芯片视作违反美出口管制行为,外交部回应
  • 《日出》华丽的悲凉,何赛飞和赵文瑄演绎出来了
  • 缅甸内观冥想的历史漂流:从心理治疗室到“非语言现场”
  • 由我国牵头制定,适老化数字经济国际标准发布