在介绍@Controller和@RestController区别之前,要先介绍网站开发模式
网站的开发模式,主要有2种:前端台分离和混合开发前后台分离:(目前企业开发的主流)这种开发模式的特点如下
- 前端人员开发前端程序,前端程序单独部署到前端服务器上
- 后端人员开开发后端程序,后端程序单独部署到后端服务器上
混合开发:(早期的开发技术,目前慢慢退出市场),这种开发模式的特点是:前端人员开发的代码和后端人员开发的代码在同一个项目中,一起打包部署。
思考:@Controller和@RestController与混合开发以及前端台分离开发之间关系
1. @Controller和混合开发
在前后端混合开发节点使用@Controller
注解作用:
- 主要用于传统前后端混合开发,生成HTML页面的控制器。
- 通过@RequestMapping配合处理请求,通常返回视图(View)。
- 适用于以服务器渲染为主的应用,不太适合前后端分离的场景。
1.1. 代码演示
【步骤一】:创建SpringBoot项目,并在pom.xml添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
【步骤二】:在resources
目录下创建templates
文件夹,并创建test.html页面
<html>
<head></head>
<body>
<h1>一个简单的视图</h1>
</body>
</html>
【步骤三】:创建TutorialController控制器
@Controller
@RequestMapping("tutorial")
public class TutorialController {
@GetMapping
public String update(){
return "test";
}
}
访问过程如下
测试: 使用浏览器访问http://localhost:8080/tutorial
结果如下
2. @Controller和前后端分离开发
前后台分离开发,后端单独开的,返回的数据不再是视图(html/JSP等),而是JSON数据
思考:@Controller如何让方法返回JSON数据,从而实现前后端开发
实际上很简单就是@Controller+@ResponseBody注解实现方法返回JSON数据
@ResponseBody注解可以在类上,也可以在方法上,在控制器类上表示所有方法返回的都是JSON数据
@GetMapping
@ResponseBody
public String update(){
return "test";
}
测试: 使用浏览器访问http://localhost:8080/tutorial
结果如下:
之间返回方法返回值,而不是视图
3. @RestController和前后端分离开发
前后端分离开发流行之后,实际上就是在控制器上添加
@Controller+@ResponseBody
注解,但是用两个注解好像有点麻烦,Spring官方就推出了一个新的注解用于替代@Controller+@ResponseBody
组合,就是@RestController
注解
RestController注解代码如下
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(annotation = Controller.class)
String value() default "";
}
从代码看我们发现RestController注解就是@Controller+@ResponseBody
结合