@Controller与@RestController的区别

文章比较了SpringMVC中@Controller和@Controller的差异,强调了@RestController用于直接返回序列化数据,适合构建RESTfulAPI,而@Controller配合ModelAndView用于传统Web应用的视图渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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提供了更加简洁和明确的声明方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值