@Controller和@RestController的区别

 

 

        关于@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注解类后就不会返回期望的视图,就能说清楚了。

posted @ 2019-01-23 15:35  星橙技术  阅读(14492)  评论(2编辑  收藏  举报