写在前面:完成这次博文的时间拖的格外久,因为在学习的时候,发现了一些不能理解的操作:注解,此外连接数据库进行操作也用了点时间。注解这个东西很神奇呀,因为以前用JSP没接触过,所以翻了翻以前的项目和在网上找资料,结果还是不能很懂注解这东西的原理,所以暂时我也只能将使用的部分记录下来(希望以后弄明白,再回过头来补充上),见谅!以下讲解都是在MAC OS环境下进行的!
关于Controller的使用重点讲:@RestController、@RequestMapping、@PathVariable、@RequestParam等4个注解的使用,关于GET和POST等请求方式放在数据库篇进行讲解。学习视频链接
一、@RestController
@RestController是一个组合注解,在spring4版本后出现。它的功能,是可以由@Controller和@ResponseBody搭配代替的。引用shuaiflying的博客:它的功能就是
- 使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
- 若返回json等内容到页面,则需要加@ResponseBody注解
所以@RestController就是解析return的jsp,html页面,并跳转到相应页面,此外还可以返回json等内容到页面(json是一种以字符串保存各种类型内容的形式)
如图1所示,使用@RestController后,我们可以在HelloController里进行网页之间的跳转和数据值的传输。
二、@RequestMapping
1、这个注解的作用就是将控制器类(HelloController)处理的所有请求都被映射到value属性所指示的路径下,通过访问这个地址路径来调用方法。
简单地说@RequestMapping就是用来控制访问方法路径的一个注解,比如:我要通过127.0.0.1:8080(本机地址+默认端口)加上“/hello”,完整的就是:127.0.0.1:8080/hello 这个地址来访问我的某个方法,就可以在这个方法前加上这个注解如图2所示
图2中,@RequestMapping(value = "/hello"),就完成了配置,而后面还有一个method属性是用来确定调用方式的(GET、POST、DELETE、PUT等)
并且如果你需要通过多个不同的地址来访问这个方法,用这个注解也可以做到,
只要像这样:@RequestMapping(value = {"/hello","hi"})
在外加个花括号,用逗号隔开,就行了。像上面这样写,就可以通过:127.0.0.1:8080/hello 以及 127.0.0.1:8080/hi
来访问。
当然也可以将@RequestMapping()直接写在类外,这样就相当于为整个类写地址(url)了,如图3所示。
2、刚才有提到method属性,是用来确定调用方式的,这个调用方式我在数据库篇会进行详细的讲解,这里就讲讲如何使用。如果像上面那样不写mothod,默认get和post都行,但不推荐!因为不安全!而有一种组合注解可以让你省略写:GetMapping()和PostMapping()分别代表在设置url的同时,设置get和post调用方式,也就是你不需要再写mothod属性了。
3、还用就是通过url来传值,这个操作我们也经常会做,比如什么页号信息呀、id号之类的。
格式如下:@RequestMapping(value = "/hello/{id}") ,其中id就是传输的变量名,知道了如何传输,那么就要知道如何获取。
三、@PathVariable和@RequestParam
这两种都是获取值得注解。
1、先说说简单的@PathVariable,这种获取方式,是直接从url里获取的,
就上节讲到的@RequestMapping(value = "/hello/{id}") ,通过@PathVariable("id") Integer myid 的格式来获取,下面只要引用myid这个变量名就可以获得id的值了,见下图4和图5.
@PathVariable,它必须依赖@RequestMapping进行传值 。
2、@RequestParam
这种传值方式比较经典,首先它不需要依赖@RequestMapping,它需要再 url里按一定格式进行传值。
拿@RequestMapping(value = "/hello/{id}")做例子,就可以把/{id}去掉,写成:@RequestMapping(value = "/hello")
然后在地址里这样写:127.0.0.1:8080/hello?id=250
"?id=value",一个问号然后加变量名,然后=需要的值,@RequestMapping(value,required,defaultValue),有三个属性,第一个就是值的变量名,required是指是否一定要传值,defaultValue是默认值
如图7所示,如果不写值,那就在等于号后面不写值,但''?id=''的格式要有,不然就会报错。