@RestController注解初步理解
一、在spring中@restcontroller的作用等同于@controller + @responsebody。
所以想要理解@restcontroller注解就要先了解@controller和@responsebody注解。
二、@controller注解
在一个类上添加@controller注解,表明了这个类是一个控制器类。但想要让这个类成为一个处理请求的处理器光有@controller注解是不够的,他还需要进一步修炼才能成为一个处理器。
1.在spring容器中创建该类的实例。创建实例的方式有两种:
<bean class="test.controller.mycontroller" />
上述这种方式是在spring容器中注入单个bean,当项目比较大,控制器类比较多时,用这种方式向spring容器中注入bean非常的让人苦恼,索性有第二种方式。
<context:component-scan base-scan="test.controller" />
这种方式会扫描指定包中的所有类,并生成相应的bean注入到spring容器中。使用这种方式当然能够极大提高我们的开发效率,但是有时候我们不想某一类型的类注入到spring容器中。
这个时候第二种方式也可以解决。
<context:component-scan base-package="test" >
<context:include-filter type="annotation" expression="org.springframework.stereotype.service"/>
</context:component-scan>
上述代码表示扫描test包中除有@service注解之外的类。
2.将@controller注解的类注入spring容器中,只是该类成为处理器的第一步,想要修炼大成,还需要在该类中添加注解@requestmapping。
@requestmapping注解是用来映射请求的,即指明处理器可以处理哪些url请求,该注解既可以用在类上,也可以用在方法上。
当使用@requestmapping标记控制器类时,方法的请求地址是相对类的请求地址而言的;当没有使用@requestmapping标记类时,方法的请求地址是绝对路径。
@requestmapping的地址可以是uri变量,并且通过@pathvariable注解获取作为方法的参数。也可以是通配符来筛选请求地址。具体的使用方法不是本次的重点,有兴趣的可以看
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注解了。
三、@responsebody注解
@responsebody表示方法的返回值直接以指定的格式写入http response body中,而不是解析为跳转路径。
格式的转换是通过httpmessageconverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换。
如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@restcontroller,而不用在每个方法中标注@responsebody,简化了开发过程。
理解@restcontroller过程中参考了下面这些博客,非常感谢
下一篇: *金门无战事 离岛游落地签全攻略