springmvc 中@Controller和@RestController的区别

1. Controller, RestController的共同点

都是用来表示Spring某个类的是否可以接收HTTP请求

2.  Controller, RestController的不同点

@Controller标识一个Spring类是Spring MVC controller处理器

@RestController:  a convenience annotation that does nothing more than adding the@Controller and@ResponseBody annotations。  @RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。

springmvc 中@Controller和@RestController的区别_第1张图片

3、如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

例如:本来应该到success.jsp页面的,则其显示success.

4、如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

5、如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

 

 

 

@RestController 注解是从 Spring 4.0 版本开始添加进来的,主要用于更加方便的构建 RESTful Web 服务。

@ResponseBody

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用此注解此次请求将不再走视图处理器,而是直接将此响应结果写入到输入流中,其效果等同于使用response对象输出指定格式的数据。

在 RESTful 的服务中,我们大部分情况是使用 JSON 为返回数据的,所以你可以直接使用 @RestController 替换掉 @Controller 和 @ResponseBody。

你可能感兴趣的:(SpringBoot)