目录
Springboot中,根据需要一般都会在Controller上加上@Controller注解,但是也有时候也见有加上@RestController。今天试了下她们的区别。

项目目录结构
Controller
@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。
(1)编写控制层
package com.kewangfeideyu.demo20190624.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
//@RestController
@CrossOrigin
@Controller
public class TestController {
//@getMapping = @requestMapping(method = RequestMethod.GET)��
//@postMapping = @requestMapping(method = RequestMethod.POST)��
/* @GetMapping(value="test")
public String sayHello(){
return "hi, this is springboot";
}*/
//@GetMapping(value="login.go")
@RequestMapping(value={"/login.go"}, method = RequestMethod.GET)
public String loggin(){
//System.out.println("跳转页面");
return "login";
}
}
(2)在pom.xml文件中添加如下模块依赖
如果直接使用@Controller这个注解,当运行该SpringBoot项目后,在浏览器中输入:local:8080/hello,会得到如下错误提示:
出现这种情况的原因在于:没有使用模版。即@Controller 用来响应页面,@Controller必须配合模版来使用。spring-boot 支持多种模版引擎包括:
1,FreeMarker
2,Groovy
3,Thymeleaf (Spring 官网使用这个)
4,Velocity
5,JSP (貌似Spring Boot官方不推荐,STS创建的项目会在src/main/resources 下有个templates 目录,这里就是让我们放模版文件的,然后并没有生成诸如 SpringMVC 中的webapp目录)
因此,解决方法:在pom.xml文件中添加如下模块依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
(3)编写页面
编写login.html,当点击的时候自动跳转到在resources目录的templates目录的文件。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="" action="你的路径" method="post">
<table align="center">
<tr>
<td>
用户名:<input type="text" name="name" />
</td>
<td>
密码:<input type="password" name="password"/>
</td>
<td>
<input type="submit" name="commit" value="登录"/>
</td>
</tr>
</table>
</form>
</body>
</html>
(4)重新启动,完成
打开链接:http://localhost:8082/login1.go,则自动跳转(页面虽丑,举个栗子):
RestController
@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。@RestController相当于@ResponseBody + @Controller。
(1)编写控制层
把TestController的Controller改为RestController,代码如下:
package com.kewangfeideyu.demo20190624.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
//@getMapping = @requestMapping(method = RequestMethod.GET)��
//@postMapping = @requestMapping(method = RequestMethod.POST)��
@GetMapping(value="login.go")
//@RequestMapping(value={"/login.go"})
public String loggin(){
//System.out.println("跳转页面");
return "login";
}
}
(2)启动项目
启动的时候,输入网址:http://localhost:8082/login.go ,则显示的如下图,并不会跳转