- 📌 博主简介: 💻 努力学习的 23 级科班生一枚 🚀
- 🏠 博主主页 : 📎 @灰阳阳
- 📚 往期回顾 :一、二维差分模板
- 💬 每日一言: “你有能力这样做,才有权力这样做”
文章目录
- 1. @Controller 注解
- 2. @RestController 注解
- 3. 选择使用哪一个?
1. @Controller 注解
@Controller是传统的Spring MVC控制器注解,主要用于返回视图页面。当你使用@Controller时,通常需要结合模板引擎(如Thymeleaf、JSP等)来生成动态HTML页面,或者重定向到其他页面。
关键点:
- 视图解析: 方法返回的是视图名称(比如页面模板的名称),而不是直接的数据。
- 灵活性: 如果你需要返回JSON数据,也可以在方法上添加@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.jspreturn "redirect:/login.html";}//方法三// 如果你想在@Controller中直接返回JSON数据,需要使用@ResponseBody@RequestMapping("/data")@ResponseBodypublic 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
优势:
使用@RestController后,所有方法默认都返回数据,而不是视图页面。这在构建前后端分离的应用或API服务时非常方便。
美中不足:
当使用@RestController后,此注解下的方法都不能解析视图界面了,只能返回数据。
关键点:
- 自动序列化: 方法返回的对象会自动转换为JSON(或XML,视配置而定)。
- 简化开发: 不需要在每个方法上都添加@ResponseBody,减少了重复代码。
- 明确语义: 当接口的主要目的是提供数据服务时,@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:
- 当应用需要返回视图(HTML页面)时。
- 当你的项目中既有页面渲染也有数据接口时,可以分情况选择在对应方法上添加@ResponseBody。
-
使用@RestController:
- 当你的应用主要提供RESTful API接口,数据交互占主导地位时。
- 开发前后端分离项目时,使用@RestController可以简化代码和维护成本。