Controller/RestController的区别


1. @Controller 注解

@Controller是传统的Spring MVC控制器注解,主要用于返回视图页面。(因为现在都是前后端分离了,所以一般不用这个了)
关键点要点:

  • 视图解析: 方法返回的是视图名称(比如页面模板的名称),而不是直接的数据。
  • 灵活性: 这个注解不仅可以返回视图,还可以返回JSO对象,只需要搭配@ResponseBody使用即可。

示例代码:

@Controller
public class MyController {
    
    //方法1
    @RequestMapping("/hello")
    public String hello(Model model) {
        // 向页面传递数据
        model.addAttribute("message", "Hello, Spring MVC!");
        // 返回视图名称(对应的模板文件,比如 hello.html 或 hello.jsp)
        return "hello";
    }

	  //方法二
      // 直接跳转到login.html页面
    @RequestMapping("/login")
    public String welcomePage() {
        // 返回视图名称,对应资源文件比如 welcome.html 或 welcome.jsp
        return "redirect:/login.html";
    }
    
 	//方法三
 	// 如果你想在@Controller中直接返回JSON数据,需要使用@ResponseBody
    @RequestMapping("/data")
    @ResponseBody
    public Map<String, String> data() {
        Map<String, String> result = new HashMap<>();
        result.put("message", "This is a JSON response");
        return result;
    }
}
  • 方法一:将其解析为视图名称
  • 方法二:直接重定向到指定页面。(redirect:/ 后的文件必须在static目录下,否则前端会报错:404!)
  • 方法三:则通过@ResponseBody可以自动把对象转换成JSON数据。这样做虽然灵活,但每个需要返回JSON的方法都必须手动添加@ResponseBody(也可以直接返回字符串)

2. @RestController 注解

@RestController是专为构建RESTful API而设计的,它的本质其实是@Controller和@ResponseBody的结合体。

@RestController = @Controller + ResponseBody

优点:

  • 自动序列化: 方法返回的对象会自动转换为JSON(或XML,视配置而定)。
  • 简化开发: 不需要在每个方法上都添加@ResponseBody,减少了重复代码。
  • 明确语义: 当接口的主要目的是提供数据服务时,@RestController能够更准确地表达开发者的意图。

美中不足:
当使用@RestController后,此注解下的方法都不能解析视图界面了,只能返回数据。

示例代码:

@RestController
public class MyRestController {
    
    @RequestMapping("/greet")
    public Map<String, String> greet() {
        Map<String, String> result = new HashMap<>();
        result.put("message", "Hello, RESTful API!");
        return result;
    }
}

上面的代码中,我们只需要使用@RestController,方法返回的Map对象会被自动转换成JSON格式输出,开发者不需要额外标注@ResponseBody。


3. 具体选择使用哪一个?

由于当下,许多项目都是前后端分离的,所以直接用Controller的很少(它可以用于后端进行视图渲染),所以建议用RestController。不过这也不是绝对的,依据情况灵活判断即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值