Spring MVC中@Controller和@RestController的区别

@Controller@RestController 是 Spring MVC 中用于处理 HTTP 请求的注解,它们有以下区别:

  1. 返回值处理方式:

    • @Controller 用于定义一个传统的 Spring MVC 控制器,它的方法通常返回视图名称或 ModelAndView 对象,由视图解析器解析并渲染成 HTML 页面。

      @Controller
      public class MyController {
             
      
          @GetMapping("/hello")
          public String hello() {
             
              return "helloPage"; // 返回视图名称
          }
      }
      
    • @RestController 组合了 @Controller@ResponseBody,用于定义 RESTful 风格的控制器。其方法的返回值会直接写入 HTTP 响应体,而不是通过视图解析器解析为视图。

      @RestController
      public class MyRestController {
             
      
          @GetMapping("/api/hello")
          public String hello() {
             
              return "Hello, REST API!"; // 直接写入响应体
          }
      }
      
  2. 默认响应类型:

    • @Controller 默认返回视图,通常使用 ViewResolver 将逻辑视图名映射为实际视图。
    • @RestController 默认返回 JSON 或 XML 格式的数据,而不是视图。
  3. 使用场景:

    • 使用 @Controller 时,通常用于构建传统的 Web 应用,其中页面渲染由视图模板(如 JSP、Thymeleaf)处理。
    • 使用 @RestController 时,适用于构建 RESTful API,其中数据以 JSON 或 XML 格式返回给客户端。

实际例子:

@Controller
public class WebPageController {
   

    @GetMapping("/helloPage")
    public String helloPage() {
   
        return "helloPage"; // 返回视图名称,通常由视图解析器解析为实际视图
    }
}
@RestController
public class ApiController {
   

    @GetMapping("/api/hello")
    public String helloApi() {
   
        return "Hello, REST API!"; // 直接返回字符串,将以 JSON 或 XML 格式写入响应体
    }
}

在构建 Web 页面的场景中,使用 @Controller 处理用户请求,返回视图名称,然后由视图解析器解析为实际视图。而在构建 RESTful API 的场景中,使用 @RestController 直接返回数据,通常以 JSON 或 XML 格式。

相关推荐

  1. Spring@Controller@RestController区别

    2024-01-17 00:26:03       22 阅读
  2. Spring@Contorller@ResController区别

    2024-01-17 00:26:03       42 阅读
  3. Spring MVC@Controller@RestController区别

    2024-01-17 00:26:03       29 阅读
  4. @Controller @RestController 区别

    2024-01-17 00:26:03       39 阅读
  5. @Controller与@RestController区别

    2024-01-17 00:26:03       18 阅读
  6. Spring、SpringMVC、Springboot三者区别联系

    2024-01-17 00:26:03       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-17 00:26:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-17 00:26:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-17 00:26:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-17 00:26:03       18 阅读

热门阅读

  1. flutter-基本功能总结

    2024-01-17 00:26:03       30 阅读
  2. c 小熊猫 c++ IDE编译ffmpeg 设置

    2024-01-17 00:26:03       37 阅读
  3. ubuntu22.04 virt-manager bridge虚拟机ip 一样

    2024-01-17 00:26:03       36 阅读
  4. C语言实现双向循环链表

    2024-01-17 00:26:03       38 阅读
  5. 01-k8s学习笔记之认识 Kubernetes

    2024-01-17 00:26:03       33 阅读
  6. 计算机网络(第六版)复习提纲1

    2024-01-17 00:26:03       39 阅读
  7. ChatGPT 淘金潮(全)

    2024-01-17 00:26:03       910 阅读
  8. RabbitMQ的高可用机制

    2024-01-17 00:26:03       36 阅读
  9. [Docker] 的常用命令

    2024-01-17 00:26:03       26 阅读