什么时候使用@Controller和@RestController
在开发中我们都定义过@Controller这个注解,他的含义是:
@Controller 将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。当然也有语义化的作用,即代表该类是充当Controller的作用
而@RestController注解就是@ResponseBody + @Controller合在一起的作用。
我们再来了解一下@ResponseBody的作用:
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据
需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@RequestMapping("/test")
@ResponseBody
public String login(){
return "hello";
}
那么在前台接收到的数据为:hello,如果我们不加@ResponseBody那么就会报错
当没用@ResponseBody修饰的时候,Spring以为会返回一个View(也就是MVC中的那C)但是返回的东西却是数据,找不到对应的视图会报错。
在前后端分离普及的现在后端返回基本不再需要返回视图只需要返回数据而我们在每个方法上都加@ResponseBody的注解显然不是很必要,于是我们这个@RestController注解就可以只在类中定义一次就规定全类方法的返回都是json或xml
如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。