@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 响应体中。