Spring Boot简明教程之实现Web开发及常用参数获取方式分析

 2019-11-02 21:05  阅读(959)
文章分类:Spring boot

文章目录

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

20191102100550\_1.png
成功访问,但是如果我们将@RestController更改为@Controller,就会发现:访问报错,大概意思就是我们缺少视图的访问模板,这是因为@Controller更多时候是搭配着视图模板进行使用(这点我们会在后面进行详细的介绍)

@Controller public class HelloController { @RequestMapping("/hello") public String hello(){ return "hello"; } }

20191102100550\_2.png

当我们加上@ResponseBody后,访问又再次成功。

@Controller @ResponseBody public class HelloController { @RequestMapping("/hello") public String hello(){ return "hello"; } }

这就是证明了:@RestController=@Controller+@ResponseBody。

当我们进入@RestController源码查看时,发现:再次印证了这一点

20191102100550\_3.png

路由设置:@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

20191102100550\_4.png

如果我们想让多个URL能访问同一个方法,应该怎么做呢?

@RestController @RequestMapping(value = "/test") public class HelloController { @RequestMapping(value = {"/hello","hello2"}) public String hello(){ return "hello"; } }

我们就发现:地址变成了一个数组,只要是这个数组内的url均能访问该方法。

20191102100550\_5.png

如果我们想指定访问的方法:

@RestController @RequestMapping(value = "/test") public class HelloController { @RequestMapping(value = "/hello" ,method = RequestMethod.POST) public String hello(){ return "hello"; } }

再次启动,我们就发现:访问方法被限制为【POST】

20191102100550\_6.png

如果我们再在浏览器输入:http://localhost:8080/test/hello访问,就会被拒绝:

20191102100550\_7.png

除此之外呢,还有更加简便的方式来实现请求方式的限制:

注释 解释
@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一样,而且更加简洁。

20191102100550\_8.png

参数获取

对于参数获取,主要使用的是下面三个注解:

注解 说明
@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

20191102100550\_9.png

如果有多个动态参数:

@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

20191102100550\_10.png

这样就获取了多个参数,但是需要注意的是: 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

20191102100550\_11.png

但需要注意的是,如果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/

20191102100550\_12.png

我们发现,当我们为传值时,返回的我们设置的默认值: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是后端开发中比较常用的接口测试工具,官网地址

20191102100550\_13.png

Json的使用

我们在上文提到过,@RestController可以将返回参数转为Json格式。那么我们现在就来感受下Spring Boot对于Json的支持。

实体类

创建如下的目录结构

20191102100550\_14.png

其中,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

20191102100550\_15.png

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

20191102100550\_16.png
我们就成功的将List转换为了Json格式,对于其他的数据类型,我们就不再进行演示,有兴趣的小伙伴可以自行进行测试。

总结

我们主要介绍了Spring Boot对于Web开发的一些支持,其中主要介绍了:@RestController 、 @RequestMapping、@PathVariable 、@RequestParam 、@RequestBody五个注解,以及演示了一下Spring Boot对于Json的支持。

源码地址

源码地址

关注博主的个人公众号,有更多视频学习资源分享~
20191102100550\_17.png


来源:http://ddrv.cn

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Spring Boot简明教程之实现Web开发及常用参数获取方式分析

相关推荐