1、在Spring中@RestController的做用等同于@Controller + @ResponseBody。html
因此想要理解@RestController注解就要先了解@Controller和@ResponseBody注解。java
2、@Controller注解spring
在一个类上添加@Controller注解,代表了这个类是一个控制器类。但想要让这个类成为一个处理请求的处理器光有@Controller注解是不够的,他还须要进一步修炼才能成为一个处理器。express
1.在spring容器中建立该类的实例。建立实例的方式有两种:json
<bean class="test.controller.MyController" />
上述这种方式是在spring容器中注入单个bean,当项目比较大,控制器类比较多时,用这种方式向Spring容器中注入bean很是的让人苦恼,索性有第二种方式。app
<context:component-scan base-scan="test.controller" />
这种方式会扫描指定包中的全部类,并生成相应的bean注入到spring容器中。使用这种方式固然可以极大提升咱们的开发效率,可是有时候咱们不想某一类型的类注入到spring容器中。url
这个时候第二种方式也能够解决。spa
<context:component-scan base-package="test" > <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan>
上述代码表示扫描test包中除有@Service注解以外的类。.net
2.将@Controller注解的类注入Spring容器中,只是该类成为处理器的第一步,想要修炼大成,还须要在该类中添加注解@RequestMapping。code
@RequestMapping注解是用来映射请求的,即指明处理器能够处理哪些URL请求,该注解既能够用在类上,也能够用在方法上。
当使用@RequestMapping标记控制器类时,方法的请求地址是相对类的请求地址而言的;当没有使用@RequestMapping标记类时,方法的请求地址是绝对路径。
@RequestMapping的地址能够是uri变量,而且经过@PathVariable注解获取做为方法的参数。也能够是通配符来筛选请求地址。具体的使用方法不是本次的重点,有兴趣的能够看
https://www.cnblogs.com/xiepeixing/p/4243288.html
1 @Controller 2 @RequestMapping("/user") 3 public class UserController{ 4 5 @RequestMapping("/users") 6 public String users() { 7 return "users"; 8 } 9 10 11 }
此时请求users方法的url路径就是:.../user/users。
能够看到上面users方法的返回值是字符串类型的,这个就是处理器在处理完任务后将要跳转的页面。若是想要方法直接返回结果,而不是跳转页面,这就要用到@ResponseBody注解了。
3、@ResponseBody注解
@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。
格式的转换是经过HttpMessageConverter中的方法实现的,由于它是一个接口,所以由其实现类完成转换。
若是要求方法返回的是json格式数据,而不是跳转页面,能够直接在类上标注@RestController,而不用在每一个方法中标注@ResponseBody,简化了开发过程。
理解@RestController过程当中参考了下面这些博客,很是感谢
http://www.javashuo.com/article/p-wpvxzyyv-dc.html