博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别
阅读量:5239 次
发布时间:2019-06-14

本文共 3105 字,大约阅读时间需要 10 分钟。

@Controller 处理http请求

@Controller//@ResponseBodypublic class HelloController { @RequestMapping(value="/hello",method= RequestMethod.GET) public String sayHello(){ return "hello"; } }

如果直接使用@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目录)

本文以Thymeleaf为例介绍使用模版,具体步骤如下:

第一步:在pom.xml文件中添加如下模块依赖:

org.springframework.boot
spring-boot-starter-thymeleaf

第二步:修改控制器代码,具体为:

/** * Created by wuranghao on 2017/4/7. */@Controllerpublic class HelloController { @RequestMapping(value="/hello",method= RequestMethod.GET) public String sayHello(){ return "hello"; } }

第三步:在resources目录的templates目录下添加一个hello.html文件,具体工程目录结构如下:

其中,hello.html文件中的内容为:

wojiushimogui

这样,再次运行此项目之后,在浏览器中输入:localhost:8080/hello

就可以看到hello.html中所呈现的内容了。

因此,我们就直接使用@RestController注解来处理http请求来,这样简单的多。

@RestController

Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合。

即@RestController是@ResponseBody和@Controller的组合注解。

@RestControllerpublic class HelloController { @RequestMapping(value="/hello",method= RequestMethod.GET) public String sayHello(){ return "hello"; } }

与下面的代码作用一样

@Controller@ResponseBodypublic class HelloController { @RequestMapping(value="/hello",method= RequestMethod.GET) public String sayHello(){ return "hello"; } }

@RequestMapping 配置url映射

@RequestMapping此注解即可以作用在控制器的某个方法上,也可以作用在此控制器类上。

当控制器在类级别上添加@RequestMapping注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的@RequestMapping注解会对类级别上的@RequestMapping的声明进行补充。

看两个例子

例子一:@RequestMapping仅作用在处理器方法上

@RestControllerpublic class HelloController { @RequestMapping(value="/hello",method= RequestMethod.GET) public String sayHello(){ return "hello"; } }

以上代码sayHello所响应的url=localhost:8080/hello。

例子二:@RequestMapping仅作用在类级别上

/** * Created by wuranghao on 2017/4/7. */@Controller@RequestMapping("/hello") public class HelloController { @RequestMapping(method= RequestMethod.GET) public String sayHello(){ return "hello"; } }

以上代码sayHello所响应的url=localhost:8080/hello,效果与例子一一样,没有改变任何功能。

例子三:@RequestMapping作用在类级别和处理器方法上

/** * Created by wuranghao on 2017/4/7. */@RestController@RequestMapping("/hello") public class HelloController { @RequestMapping(value="/sayHello",method= RequestMethod.GET) public String sayHello(){ return "hello"; } @RequestMapping(value="/sayHi",method= RequestMethod.GET) public String sayHi(){ return "hi"; } }

这样,以上代码中的sayHello所响应的url=localhost:8080/hello/sayHello。

sayHi所响应的url=localhost:8080/hello/sayHi。

从这两个方法所响应的url可以回过头来看这两句话:当控制器在类级别上添加@RequestMapping注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的@RequestMapping注解会对类级别上的@RequestMapping的声明进行补充。

最后说一点的是@RequestMapping中的method参数有很多中选择,一般使用get/post.

小结

本篇博文就介绍了下@Controller/@RestController/@RequestMappping几种常用注解,下篇博文将介绍几种如何处理url中的参数的注解@PathVaribale/@RequestParam/@GetMapping。

其中,各注解的作用为:

@PathVaribale 获取url中的数据

@RequestParam 获取请求参数的值

@GetMapping 组合注解

转载于:https://www.cnblogs.com/Jeremy2001/p/11108225.html

你可能感兴趣的文章
String字符串创建与存储机制
查看>>
现代程序设计 作业1
查看>>
事件和信号量
查看>>
ASP.NET MVC 3 笔记
查看>>
面试系列19 redis的雪崩和穿透
查看>>
c# 扩展方法奇思妙用
查看>>
【线性代数公开课MIT Linear Algebra】 第一课 矩阵的行图像与列图像
查看>>
在android开发中添加外挂字体
查看>>
python库--pandas
查看>>
JS encodeURIComponent函数
查看>>
短信验证码接口(容联运通讯)
查看>>
Java中类体的构成
查看>>
HTML 和 CSS 画三角形和画多边行基本原理及实践
查看>>
带搜索的ComboBox
查看>>
WPF 插拔触摸设备触摸失效
查看>>
如何优雅的实现INotifyPropertyChanged接口
查看>>
.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证
查看>>
win10 uwp 使用 msbuild 命令行编译 UWP 程序
查看>>
解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
查看>>
Chapter 1 Securing Your Server and Network(2):管理服务的SIDs
查看>>