@Controller与@RestController的区别

@RestController和@Controller是Spring MVC中用于标记控制器类的注解,它们的主要区别在于处理HTTP响应的默认行为。当在一个带有@Controller注解的类或方法上同时使用@RequestMapping和@ResponseBody注解时,该方法的返回值会被转化为HTTP响应体的内容,就和@RestController的效果一样了

  1. @Controller:
    • @Controller注解用于标记一个类作为Spring MVC中的控制器类,它主要用于处理HTTP请求并返回视图名称或ModelAndView对象,以便框架根据视图名称渲染相应的视图。
    • 当控制器方法返回一个ModelAndView对象时,Spring MVC会根据其中的视图名称查找并渲染视图模板,适合构建带有视图渲染的传统Web应用。

示例:

@Controller
public class TraditionalController {

    @GetMapping("/hello")
    public ModelAndView sayHello() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", "Hello World!");
        modelAndView.setViewName("hello-view"); // 假设有名为hello-view的JSP或Thymeleaf模板
        return modelAndView;
    }
}
  1. @RestController:
    • @RestController注解是@Controller和@ResponseBody的组合,它指示控制器方法直接返回序列化的数据(如JSON、XML等)而不是视图名或ModelAndView对象。
    • 当控制器方法返回一个简单的数据类型(如POJO、String、Map等)时,Spring MVC会自动将其转换为HTTP响应体的内容。

示例:

@RestController
public class RestfulController {

    @GetMapping("/api/hello")
    public Message sayHello() {
        Message message = new Message("Hello World!");
        return message;
    }

    // Message 是一个简单的 POJO 类
    public class Message {
        private String content;

        public Message(String content) {
            this.content = content;
        }

        // getter and setter methods...
    }
}

在这个例子中,当访问 /api/hello 时,RestfulController将会返回一个JSON格式的消息对象,而不是试图寻找并渲染视图。在实际应用中,这很适合构建RESTful API服务,返回的数据通常会被客户端应用程序(如JavaScript、移动应用等)直接消费。

总结来说,@RestController本质上是@Controller和全局@ResponseBody的组合,它表明所有的方法都将返回纯数据而非视图。因此,虽然单独使用@Controller配合每个方法上的@RequestMapping和@ResponseBody能达到同样的效果,但@RestController提供了更加简洁和明确的声明方式。

相关推荐

  1. @Controller@RestController区别

    2024-03-31 12:42:02       40 阅读
  2. Spring中@Controller和@RestController区别

    2024-03-31 12:42:02       42 阅读
  3. @Controller 和 @RestController 区别

    2024-03-31 12:42:02       65 阅读
  4. Spring中@Contorller和@ResController区别

    2024-03-31 12:42:02       62 阅读
  5. Spring MVC中@Controller和@RestController区别

    2024-03-31 12:42:02       52 阅读
  6. @RestController

    2024-03-31 12:42:02       56 阅读
  7. Servlet、Tomcat、Control区别

    2024-03-31 12:42:02       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 12:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 12:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 12:42:02       82 阅读
  4. Python语言-面向对象

    2024-03-31 12:42:02       91 阅读

热门阅读

  1. 机器学习模型——SVM(支持向量机)

    2024-03-31 12:42:02       43 阅读
  2. Android9.0以后不允许HTTP访问的解决方案

    2024-03-31 12:42:02       44 阅读
  3. 【PostgreSQL】- 1.3 PostgreSQL 创建数据库(初始化)

    2024-03-31 12:42:02       37 阅读
  4. 大历史下的 tcp:f-rto 新改

    2024-03-31 12:42:02       36 阅读
  5. P8665 [蓝桥杯 2018 省 A] 航班时间

    2024-03-31 12:42:02       40 阅读
  6. HTML的基础使用以及方法

    2024-03-31 12:42:02       41 阅读
  7. 更新一条SQL的执行流程

    2024-03-31 12:42:02       33 阅读
  8. 【ERROR】搭建harbor时,redis和register启动失败

    2024-03-31 12:42:02       42 阅读
  9. 【力扣】217. 存在重复元素

    2024-03-31 12:42:02       35 阅读
  10. 第十四届省赛大学B组(C/C++)飞机降落

    2024-03-31 12:42:02       36 阅读