Springboot中的@Controller和@RestController的区别

本文介绍了Springboot中@Controller和@RestController的区别。@Controller用于响应页面请求,可结合模板引擎使用,而@RestController则用于返回JSON或其他实体对象,不支持页面跳转。使用@RestController时,方法默认具有@ResponseBody的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

项目目录结构

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

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值