Springboot中的@Controller和@RestController的区别

目录

项目目录结构

Controller

(1)编写控制层

(2)在pom.xml文件中添加如下模块依赖

(3)编写页面

(4)重新启动,完成

RestController

(1)编写控制层

(2)启动项目 


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 ,则显示的如下图,并不会跳转

猜你喜欢

转载自blog.csdn.net/qq_36411874/article/details/93600787
今日推荐