SpringBoot学习笔记
Controller的使用
一些Spring注解及其含义
注解 | 含义 |
---|---|
@Controller | 处理Http请求,配合模板使用 |
@RestController | 组合注解,可用@Controller与@ResponseBody两句等价替换 |
@RequestMapping | 配置url映射,用户通过url访问到某个指定方法 |
@PathVariable | 获取url中的数据 |
@RequestParam | 获取请求参数的值,以?和=搭配使用的方式 |
@GetMapping | 组合注解,相当于指定了请求方式为GET的@RequestMapping注解 |
使用@Controller注解
1.在HelloController.java文件关键代码如下:
@Controller
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String say(){
return "index";
}
}
2.在resources/templates/下新建index.html文件,并编写代码:
<h1>Hello SpringBoot!</h1>
3.在pom.xml文件中添加依赖的模板配置,其中thymeleaf是spring官方的一个模板:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
4.运行,用浏览器打开:
注意:若未成功出现此界面,可能是由于新配置了模板的pom.xml未及时导入,可右击pom.xml文件>Maven>Reimport
然后再运行即可。
使用@RequestMapping注解
比如刚刚使用的注解:
@RequestMapping(value = "/hello", method = RequestMethod.GET)
value属性
其中value的值用于设置映射的url地址,此时访问的url应为:
如果既想通过/hello来访问也想通过其他url映射访问,比如/yimi,则可把value的值设置成集合:
@RequestMapping(value = {"/hello", "/yimi"}, method = RequestMethod.GET)
这样,使用
也可以访问到同样内容了。
注意:url映射是大小写敏感的。
@RequestMapping还可以对整个类也进行url映射,把HelloControll.java文件进行修改(现在不用pom.xml和index.html做模板映射):
@RestController
@RequestMapping(value="hello")
public class HelloController {
@RequestMapping(value = "yimi", method = RequestMethod.GET)
public String say(){
return "RequestMapping test";
}
}
使用@RequestMapping同时对类和方法都做了url映射,则访问时,url应为:
method属性
method用于指定请求方式,比如GET、POST等。
现在把请求方式换为POST:@RequestMapping(value = "yimi", method = RequestMethod.POST)
这样再按原来的方式就访问不到了:
可以使用工具Postman来访问。
选择POST的请求方式,输入url,点击Send,即可在下面看到返回得到的信息。
注意:若不指定,method请求方式,则默认GET/POST均可访问到,但安全起见还是不省略method。
使用@PathVariable注解
@PathVariable可用于获取url中的数据。现在继续修改HelloController.java文件内容如下:
@RestController
@RequestMapping(value="hello")
public class HelloController {
@RequestMapping(value = "yimi/{num}", method = RequestMethod.GET)
public String say(@PathVariable("num")Integer myNum){
return "num:" + myNum;
}
}
浏览器端效果如图:
或者@RequestMapping(value = "{num}/yimi", method = RequestMethod.GET)
则url也可如下使用:
使用@RequestParam注解
修改HelloController.java代码如下:
@RestController
@RequestMapping(value="hello")
public class HelloController {
@RequestMapping(value = "yimi", method = RequestMethod.GET)
public String say(@RequestParam("num")Integer myNum){
return "num:" + myNum;
}
}
浏览器端用法:
注意:若为给num参数赋值,则值为null
那么如何给num设置默认值呢?修改@RequestParam如下:
@RequestParam(value = "num", required = false, defaultValue = "0")
其中required指定是否必传参数,false表示非必传参数;defaultValue表示未传参数时的默认值(注意要打引号)。
再通过浏览器访问:
现在,即使不在url中传num的值,num也有默认值显示了。
使用@GetMapping注解
@GetMapping是一个组合注解,相当于指定了请求方式为GET的@RequestMapping注解,即:
@RequestMapping(value = "yimi", method = RequestMethod.GET)
等价于
@GetMapping(value="yimi")