关于@RestController 的解释官方文档是这样说的@RestController is astereotype annotation that combines @ResponseBody and @Controller.就是说@RestController注解相当于@ResponseBody加 @Controller合在一起的作用。那本着追根问底的原则,那么就先探讨下@Controller和@ResponseBody的作用 。
首先看到@Controller位于org.springframework.stereotype包下,接下来逐条解释每个注解的含义
@Target({ElementType.TYPE}),看源码不解释
说明该注解是作用在类、接口(包括注解)或者是枚举类上
@Retention(RetentionPolicy.RUNTIME)
表明该注解由编译器记录在类文件中,虚拟机在运行时保留它们,因此可以反射地读取它们。
@Documented 注释类型申明,没什么卵用
@Component是一个元注解,可以注解其他类注解,如@Controller、 @Service,当然如@Controller @Service;当然也可以注解类,当一个类使用该注解时,这些类就会被实例化,相当于配置文件中的 <bean/>。
@ResponseBody
该注解是作用在类上或方法上,作用是什么呢,是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的是在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
通俗点,直接上图
加@ResponseBody
访问localhost:8080/hellotest
而看@RestController源码可以看出
所以你可能之前一直纳闷,为啥子@RestController注解类后就不会返回期望的视图,就能说清楚了。