在使用Spring开发时,对于Controller中的注解
RestController和Controller需要我们区分清楚。如果Controller中某个返回一个页面,使用
Controller单独使用
Controller不加ResponseBody的话,一般使用在,要返回一个视图的情况,这种情况属于比较传统的SpringMVC的应用,对应于前后端不分离的情况。SpringMVC传统工作流程示例1:
Controller返回一个页面当我们需要直接在后端返回一个页面的时候,Spring推荐使用Thymeleaf模板引擎。
SpringMVC中
Controller中的方法,可以直接返回模板名称,接下来Thymeleaf模板引擎,会自动进行渲染,模板中的表达式支持Spring表达式语言(SpringEL)。如果需要用到Thymeleaf模板引擎,注意添加依赖!不然会报错。添加依赖控制类的方法的返回值return"hello",Spring默认会去resources目录下templates目录下找,所以建议把页面放在resources/templates目录下hello.html;
如果要对页面在templates目录下的hello文件夹中的话,返回页面的时候,控制类的方法的返回值return"hello/hello"。
添加依赖如果Controller中某个返回JSON或XML形式数据,使用
RestController,或者Controller+ResponseBody组合使用如果你需要在Spring4之前,开发RESTfulWeb服务的话,你需要使用
Controller并结合ResponseBody注解,也就是说Controller+ResponseBody=RestController(Spring4之后新加的注解),返回JSON或XML形式数据。RestController只返回对象,对象数据直接以JSON或XML形式,写入HTTP响应(Response)中,这种情况属于RESTfulWeb服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。
添加依赖ResponseBody注解的作用,是将Controller的方法返回的对象,通过适当的转换器转换为指定的格式之后,写入到HTTP响应(Response)对象的body中,通常用来返回JSON或者XML数据,返回JSON数据的情况比较多。
SpringBoot默认集成了jackson,对于此需求你不需要添加任何相关依赖,返回需要返回的JSON、XML的结果集。
添加依赖使用
RestController注解的时候需要注意几个问题:如果使用
RestController注解Controller,那么该Controller中的方法,就无法返回jsp页面。就是说如果在方法中return"xx",那么它只会返回"xx"的内容,因为
RestController中相当于已经有了RessponseBody的注解效果,所以它无法返回jsp,html界面,配置的InternalResourceViewResolver不工作,只能返回return的内容。如果该Controller中需要返回jsp,html界面,那么就需要使用
Controller注解Controller,不能用RestController。如果我们在Controller方法中,需要返回JSON、XML,或者我们自己定义的类型到页面中,那么就需要使用
ResponseBody注解该方法。