@Controller
与 @RestController
@Controller
注解:
@Controller
用于标识一个类,它是Spring MVC框架中的控制器,通常与@RequestMapping
一起使用。- 通常,在传统的Spring MVC应用程序中,
@Controller
类返回视图(HTML、JSP等),它主要用于构建传统的多页面Web应用。 - 方法在使用
@Controller
的类中通常返回一个视图名,Spring会将该视图名解析为实际的视图模板文件。
示例:
@Controller
public class MyController {
@RequestMapping("/home")
public String home() {
return "index"; // 返回视图名
}
}
RestController
注解:
@RestController
是一个特殊的控制器,它结合了 @Controller
和 @ResponseBody
注解的功能。它主要用于构建RESTful Web服务,以返回数据(通常是JSON或XML),而不是视图。
特点:
@RestController
用于处理HTTP请求,但不像传统的@Controller
那样返回视图。相反,它将方法的返回值以JSON或XML等数据格式作为响应返回给客户端。
适用场景:
- RESTful Web服务的构建,其中客户端需要与服务器进行数据交互,而不需要视图呈现。
示例:
@RestController
public class MyRestController {
@RequestMapping("/api/data")
public Map<String, String> getData() {
Map<String, String> data = new HashMap<>();
data.put("key", "value");
return data; // 返回JSON数据
}
}
@Controller vs @RestController 总结
@Controller
用于传统的多页面Web应用,主要用于处理HTTP请求并返回视图。@RestController
用于构建RESTful Web服务,主要用于处理HTTP请求并返回数据,通常是JSON或XML格式。@RestController
等同于在@Controller
类的所有处理方法上添加@ResponseBody
注解,以指示返回数据而不是视图。
选择使用 @Controller
还是 @RestController
取决于你的应用程序的性质:
-
如果你正在构建传统的多页面Web应用,其中视图是关键,使用
@Controller
是合适的。它允许你返回HTML页面或其他视图类型。 -
如果你正在构建RESTful API或希望以数据的形式返回响应,那么使用
@RestController
更为合适。它自动将方法的返回值转换为JSON或其他数据格式,适用于构建现代的Web服务和API。