Spring Boot简明教程之实现Web开发及常用参数获取方式分析
文章目录
Spring Boot简明教程之实现Web开发及常用参数获取方式分析
在前面的文章中,我们已经大致介绍了有关Spring Boot的项目配置等信息,我们也体会到了Spring Boot对于Web开发的支持。在这篇文章中,我们将介绍Spring Boot对于Web开发的支持:
Controller的使用
在MVC类型的项目开发中,控制器(Controller)是十分重要的一个环节,其中,最重要的就是下面四个注解:
注解 | 解释 |
---|---|
@Controller | 处理请求 |
@ResponseBody | 将返回的数据转换为 JSON 格式 |
@RestController | @RestController=@Controller+@ResponseBody |
@RequestMapping | 配置URL映射 |
请求处理:@RestController
控制器(Controller)是MVC架构中最重要的一环,同时JSON对于前后端分离的项目中,前后端数据交流的重要传输方式,对于这二者的支持,对于Web开发来说是十分重要的。我们都知道@Controller用于处理http请求,而@ResponseBody是将数据转换为JSON数据,而@RestController就更像是两者的结合。
例如:
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
我们在浏览器输入:http://localhost:8080/hello
成功访问,但是如果我们将@RestController更改为@Controller,就会发现:访问报错,大概意思就是我们缺少视图的访问模板,这是因为@Controller更多时候是搭配着视图模板进行使用(这点我们会在后面进行详细的介绍)
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
当我们加上@ResponseBody后,访问又再次成功。
@Controller
@ResponseBody
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
这就是证明了:@RestController=@Controller+@ResponseBody。
当我们进入@RestController源码查看时,发现:再次印证了这一点
路由设置:@RequestMapping
【@RequestMapping】 用于配置URL映射,即可配置与类,也可以配置与方法。配置于类表示该类访问的父路径,配置于方法则表示该方法的实际映射地址。
该注解有三个常用的属性:value、method 和 produces。
属性 | 说明 |
---|---|
value | 指定请求的实际地址,可以省略不写 |
method | 指定请求的类型,默认为 GET |
produces | 指定返回内容类型,如 produces = "application/json; charset=UTF-8" |
例如,我们将之前的HelloController更改为:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public String hello(){
return "hello";
}
}
我们就发现,访问的地址已经变成了:http://localhost:8080/test/hello
如果我们想让多个URL能访问同一个方法,应该怎么做呢?
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = {"/hello","hello2"})
public String hello(){
return "hello";
}
}
我们就发现:地址变成了一个数组,只要是这个数组内的url均能访问该方法。
如果我们想指定访问的方法:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello" ,method = RequestMethod.POST)
public String hello(){
return "hello";
}
}
再次启动,我们就发现:访问方法被限制为【POST】
如果我们再在浏览器输入:http://localhost:8080/test/hello
访问,就会被拒绝:
除此之外呢,还有更加简便的方式来实现请求方式的限制:
注释 | 解释 |
---|---|
@DeleteMapping | DELETE方法 |
@GetMapping | GET方法 |
@PutMapping | PUT方法 |
@PostMapping | POST方法 |
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
// @RequestMapping(value = "/hello" ,method = RequestMethod.GET,produces = "application/json; charset=UTF-8")
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
启动:效果和 @RequestMapping一样,而且更加简洁。
参数获取
对于参数获取,主要使用的是下面三个注解:
注解 | 说明 |
---|---|
@PathVariable | 获取 URL 参数 |
@RequestParam | 从 Request 里获取参数值 |
@RequestBody | 获取JSON实体 |
@PathVariable
使用@PathVariable获取参数,更多的是针对http://localhost:8080/test/hello/{phone}
这类动态参数,例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello/{phone}")
public Integer phone(@PathVariable Integer phone ){
return phone;
}
}
启动项目,并在浏览器输入:http://localhost:8080/test/hello/546
如果有多个动态参数:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello/{phone}/{name}")
public String phone(@PathVariable Integer phone,@PathVariable String name){
return "电话:"+ phone +"\n"+ "姓名: " + name;
}
}
启动项目,在浏览器输入:http://localhost:8080/test/hello/546/name
这样就获取了多个参数,但是需要注意的是: URL 中的参数和方法中的参数名需要保持一致。如果不同,那么就需要指定URL中的参数名来获取,例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello/{phone}/{name}")
public String phone(@PathVariable(value = "phone") Integer myPhone,@PathVariable String name){
return "电话:"+ myPhone +"\n"+ "姓名: " + name;
}
}
这里就不再展示运行结果。
@RequestParam
@RequestParam获取参数主要针对URL为:http://localhost:8080/test/hello/?phone=456
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public Integer phone(@RequestParam Integer phone){
return phone;
}
}
启动项目,输入:http://localhost:8080/test/hello/?phone=456
但需要注意的是,如果URL 中的参数和方法中的参数名不一致,仍然需要指定参数名,例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public Integer phone(@RequestParam(value = "phone") Integer myPhone){
return myPhone;
}
}
这里就不再演示运行结果。同时@RequestParam还有两个常用的属性:
属性 | 说明 |
---|---|
required | 参数是否为必须,True 表示为必须; |
defaultValue | 默认值,当获取到的参数为Null时使用 |
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public Integer phone(@RequestParam(value = "phone",required = false,defaultValue = "139") Integer myPhone){
return myPhone;
}
}
启动项目,浏览器输入:http://localhost:8080/test/hello/
我们发现,当我们为传值时,返回的我们设置的默认值:139。
@RequestBody
@RequestBody主要用来获取前端传来的封装好的Json格式的参数。
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello",method = RequestMethod.POST)
public String hello( @RequestBody String str){
return str;
}
}
然后,我们使用Postman进行Post请求测试(因为浏览器不方便对Post请求进行测试,Postman是后端开发中比较常用的接口测试工具,官网地址)
Json的使用
我们在上文提到过,@RestController可以将返回参数转为Json格式。那么我们现在就来感受下Spring Boot对于Json的支持。
实体类
创建如下的目录结构
其中,Person类为:
package cn.newtol.springboot05.entity;
/**
* @Author: REN
* @Description:
* @Date: Created in 20:10 2018/9/17
*/
public class Person {
private String name;
private Integer phone;
public Person(String name, Integer phone) {
this.name = name;
this.phone = phone;
}
...
/* 省略get、set方法 */
}
HelloController为:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/person",method = RequestMethod.GET)
public Person person(){
Person person = new Person("ABC",456);
return person;
}
}
启动项目,浏览器输入:http://localhost:8080/test/person
List
将HelloController改为:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/list",method = RequestMethod.GET)
public List<String> list(){
List<String> lists = new ArrayList<>();
lists.add("abc");
lists.add("cdf");
return lists;
}
}
启动项目,浏览器输入:http://localhost:8080/test/list
我们就成功的将List转换为了Json格式,对于其他的数据类型,我们就不再进行演示,有兴趣的小伙伴可以自行进行测试。
总结
我们主要介绍了Spring Boot对于Web开发的一些支持,其中主要介绍了:@RestController 、 @RequestMapping、@PathVariable 、@RequestParam 、@RequestBody五个注解,以及演示了一下Spring Boot对于Json的支持。