首页 > 其他分享 >@RestController和@Controller的区别

@RestController和@Controller的区别

时间:2024-09-19 11:15:40浏览次数:13  
标签:RestController RequestMapping 区别 Spring 视图 Controller 注解

@RestController@Controller 是Spring框架中用于定义控制器(Controller)的两个非常重要的注解,它们都用于处理HTTP请求,但它们之间存在一些关键的区别。

1.@Controller

  • @Controller 注解是Spring MVC的一部分,用于定义一个控制器类。
  • 当Spring MVC接收到一个请求时,它会根据请求的URL映射到相应的控制器类上。
  • @Controller 注解的类中的方法返回的是字符串(通常是视图名)或ModelAndView对象,这些返回值会用于渲染视图(通常是JSP页面)。
  • @Controller 注解通常与@RequestMapping或它的变体(如@GetMapping, @PostMapping等)一起使用来定义请求处理的方法。
  • 如果你希望将MVC模式中的“控制器”部分与“视图”部分分离,并且希望由Spring MVC来管理视图的渲染,那么你应该使用@Controller

2.@RestController

  • @RestController 是Spring 4引入的一个方便的注解,它实际上是@Controller@ResponseBody的组合注解。
  • 它意味着,当控制器中的方法返回一个对象时,Spring会自动将这个对象转换为JSON或XML(取决于请求的Accept头部)并写入HTTP响应体中。
  • @RestController更适合构建RESTful Web服务,因为它简化了返回JSON或XML数据的过程。
  • 使用@RestController注解的控制器类中的方法通常会返回一个对象或对象列表,而不是视图名或ModelAndView对象。
  • @RestController也常与@RequestMapping或它的变体一起使用来定义请求处理的方法。

3.注意

  • 如果你正在构建一个需要渲染视图的Web应用(如基于JSP的Web应用),那么你应该使用@Controller
  • 如果你正在构建一个RESTful Web服务,希望直接返回JSON或XML等数据格式,那么@RestController将是更好的选择。
  • @RestController简化了返回数据的过程,因为它自动将返回的对象转换为JSON或XML,而@Controller则需要额外的步骤来渲染视图。

上代码和效果图

@Controller注解

点击查看代码
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/init")
    public String init() {
        return "login";
    }
}

image

@RestController注解

点击查看代码
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/init")
    public String init() {
        return "login";
    }
}

image

标签:RestController,RequestMapping,区别,Spring,视图,Controller,注解
From: https://www.cnblogs.com/sailCoding/p/18420217

相关文章

  • 请求转发和重定向的区别
    今天讲一讲请求转发和重定向的区别,两者看起来其实很像,所以今天就好好区分一下两者的区别和使用场景。请求转发:请求转发和用户没有关系。对服务A发送的请求会被转发给另一个服务B,然后服务B响应给A,然后A再通过响应回来。响应码:2xx响应码,一般是200正常响应。URL:不会变化。......
  • ‌‌JDBC和‌ODBC的区别
    JDBC和ODBC都是用于数据库连接的接口,但它们在技术背景、跨平台性、驱动程序来源、使用方式和配置、性能和安全性以及应用场景等方面存在显著差异。‌技术背景和语言支持‌JDBC是‌Java数据库连接技术,完全基于Java语言,因此与Java程序无缝集成。ODBC是一种开放、标准化的数据库连......
  • uart loglevel和pr_debug的区别
    pr_debug是Linux内核中用于打印调试信息的宏,它的行为会根据编译时的配置有所不同。如果定义了CONFIG_DYNAMIC_DEBUG配置选项,pr_debug会扩展为dynamic_pr_debug,这允许在运行时动态地控制调试信息的输出。如果没有定义CONFIG_DYNAMIC_DEBUG,但定义了DEBUG,则pr_debug等同于......
  • webpack和vite的区别,为什么vite启动速度比webpack快?
    ......
  • 源码包和 RPM 包是两种常见的 Linux 软件包形式,它们各有特点和适用场景。下面是这两种
    概念源码包:定义:源码包包含了软件的源代码,用户需要自己下载源码包,然后进行编译和安装。优点:用户可以根据自己的需求定制编译选项,选择安装哪些功能模块,还可以查看和修改源代码。缺点:安装过程较为复杂,需要一定的技术知识,而且安装速度相对较慢。RPM包:定义:RPM(RedHatPackageManager)是......
  • Rust中的&运算符取一个变量的地址与C/C++中意义相同么?如果不同又有什么区别呢?
    Rust中的&运算符与C/C++中的&运算符有相似之处,但它们的行为和作用有一些关键区别,特别是在所有权、内存安全和编译期检查方面。1.相似之处在Rust和C/C++中,&运算符都用于获取变量的地址,即生成一个指针或引用。它们的作用可以概括为:将一个值的引用或地址作为结果,而不......
  • 活动系统开发之采用设计模式与非设计模式的区别-后台功能总结
    1、数据库ER图2、后台功能字段题目功能字段数据列表编号题目名称选项数量状态1=启用0=禁用创建时间修改时间保存题目名称选项集选项内容是否正确答案1=正确0=错误启禁用删除素材图库功能字段数据列表编号原文件名称文件类型文件大小加密后文件名文件具体路径上传类......
  • 旁路电容和去耦电容之间的区别和联系
    旁路电容(BypassCapacitor)和去耦电容(DecouplingCapacitor)是电子电路中常用的两种电容器,虽然它们在实际应用中常常被交替使用,但在概念和功能上有一定的联系和区别。旁路电容(BypassCapacitor)定义: 旁路电容通常指安装在电源和地之间,用于滤除电源上的高频噪声或干扰的电容器。它......
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
    常用的请求映射注解介绍@GetMapping用于处理HTTPGET请求。等价于 @RequestMapping(method=RequestMethod.GET)。1@GetMapping("/path")2publicStringhandleGetRequest(){3return"GETrequesthandled";4}@PostMapping用于处理HTTPPOST请求。等价于 ......
  • HTTP和HTTPS有什么区别?
    我们在打开网页的时候经常会看到有的网址显示的是HTTP,但有的网址显示的是HTTPS,有的人会禁不住发问,这两者之间到底有什么区别?为什么显示的会不一样?显示HTTP的能不能变成HTTPS?要搞清这些问题,先要弄明白这两者的概念。一、HTTP和HTTPS的基本概念HTTP:超文本传输协议(HypertextTra......