@RestController
和 @ResponseBody
是 Spring MVC 中用于返回数据的两种方式,它们与 @Controller
的区别如下:
-
@Controller:
@Controller
是 Spring MVC 中用于标识控制器类的注解。控制器类通常负责处理客户端请求,并返回相应的视图。在使用@Controller
注解的方法中,返回值通常是一个视图名称,Spring MVC 会根据该视图名称解析出对应的视图,并将其呈现给客户端。 -
@RestController:
@RestController
是@Controller
的一个特殊版本,它结合了@Controller
和@ResponseBody
的功能。@RestController
注解用于标识 RESTful 风格的控制器类,其中的方法不返回视图,而是直接返回数据,通常是 JSON 或 XML 格式的数据。这样的控制器方法返回的数据会直接作为 HTTP 响应的主体发送给客户端,而不会被解析为视图。 -
@ResponseBody:
@ResponseBody
是一个方法级别的注解,用于将方法的返回值直接写入 HTTP 响应体中。当一个方法使用@ResponseBody
注解时,Spring MVC 将会序列化方法的返回值,并将序列化后的内容作为 HTTP 响应的主体发送给客户端。这使得方法可以直接返回数据,而不需要依赖视图解析器。
综上所述,@RestController
是一种用于创建 RESTful 风格的控制器类的注解,它的方法通常直接返回数据,而不返回视图。而 @ResponseBody
则是一个方法级别的注解,用于将方法的返回值直接写入 HTTP 响应体中。