关于 @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 id=""class=""/>.
@ResponseBody
该注解是作用在类上或方法上, 作用是什么呢, 是将 controller 的方法返回的对象通过适当的转换器转换为指定的格式之后, 写入到 response 对象的 body 区, 通常用来返回 JSON 数据或者是 xml 数据, 需要注意的是在使用此注解之后不会再走视图处理器, 而是直接将数据写入到输入流中, 他的效果等同于通过 response 对象输出指定格式的数据.
通俗点, 直接上图
加 @ResponseBody
访问 localhost:8080/hellotest
而看 @RestController 源码可以看出
所以你可能之前一直纳闷, 为啥子 @RestController 注解类后就不会返回期望的视图, 就能说清楚了.
来源: https://www.cnblogs.com/xingchengtec/p/10309289.html