springboot 接收小程序图片以及参数_Spring Boot 中的 MVC 支持

093228df0849c83e27a92bec4a21e04f.gif

阅读本文约需要5分钟

大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了Spring Boot 中的项目属性配置。今天跟大家分享下Spring Boot对MVC的支持。

实际项目中我们最常用的几个注解,包括 @RestController、 @RequestMapping、@PathVariable、@RequestParam 以及 @RequestBody,本文主要介绍下这几个注解常用的使用方式和特点。

1. @RestController

@RestController 是 Spring Boot 新增的一个注解,我们看一下该注解都包含了哪些东西。

65add8f3e7e1123ab10b0fd0d8607dc7.png

可以看出,@RestController 注解包含了原来的 @Controller 和 @ResponseBody 注解,使用过 Spring 的朋友对 @Controller 注解已经非常了解了,这里不再赘述。

@ResponseBody 注解是将返回的数据结构转换为 JSON 格式,所以 @RestController 可以看作是 @Controller 和 @ResponseBody 的结合体,相当于偷个懒,我们使用 @RestController 之后就不用再使用 @Controller 了。

但需要注意一个问题:如果是前后端分离,不用模板渲染的话,比如 Thymeleaf,可以直接使用 @RestController 将数据以 JSON 格式传给前端,前端拿到之后解析;但如果不是前后端分离,需要使用模板渲染的话,一般 Controller 中都会返回到具体的页面,此时就不能使用 @RestController 了,比如:

379e4d52be40c988d709d31dc802eeaf.png

其实是需要返回到 user.html 页面的,如果使用 @RestController,会将 user 作为字符串返回,所以这时需要使用 @Controller 注解。这在后面的讲解中会做说明。

2. @RequestMapping

@RequestMapping 是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;方法的级别上注解表示进一步指定到处理方法的映射关系。

该注解有 6 个属性,一般在项目中比较常用的有 3 个属性:value、method 和 produces。

value 属性:指定请求的实际地址,value 可以省略不写;

method 属性:指定请求的类型,主要有 GET、PUT、POST、DELETE,默认为 GET;

produces 属性:指定返回内容类型,参考下面代码。

produces = "application/json; charset=UTF-8"

@RequestMapping 注解比较简单,举个例子:

d63d2aa337ab0d4538e4b37ed173cd84.png

四种不同的请求方式,都有相应的注解。不用每次在 @RequestMapping 注解中加 method 属性来指定,上面的 GET 方式请求可以直接使用 @GetMapping("/get") 注解,效果一样。相应地,PUT 方式、POST 方式和 DELETE 方式对应的注解分别为 @PutMapping、@PostMapping 和 DeleteMapping。

3. @PathVariable

@PathVariable 注解主要用来获取 URL 参数,Spring Boot 支持 Restfull 风格的 URL,比如一个 GET 请求携带一个参数 id,我们将 id 作为参数接收,可以使用 @PathVariable 注解。如下:

ee7e4eeb62b7744aa83f1abd06934da5.png

这里需要注意一个问题,如果想要 URL 中占位符中的 id 值直接赋值到参数 id 中,需要保证 URL 中的参数和方法接收参数一致,否则将无法接收。如果不一致的话,其实也可以解决,需要用 @PathVariable 中的 value 属性来指定对应关系。如下:

9336e169d601e70e3fc8ecd9f9e71455.png

对于访问的 URL,占位符的位置可以在任何位置,不一定非要在最后,比如这样也行:/xxx/{id}/user。另外,URL 也支持多个占位符,方法参数使用同样数量的参数来接收,原理和一个参数是一样的。

所以它支持多个参数的接收。同样地,如果 URL 中的参数和方法中的参数名称不同的话,也需要使用 value 属性来绑定两个参数。

4. @RequestParam

@RequestParam 注解顾名思义,也是获取请求参数的,上面我们介绍了 @PathValiable 注解也是获取请求参数的,那么 @RequestParam 和 @PathVariable 有什么不同呢?

主要区别在于:@PathValiable 是从 URL 模板中获取参数值, 即这种风格的 URL:http://localhost:8080/user/{id};而 @RequestParam 是从 Request 里获取参数值,即这种风格的 URL:http://localhost:8080/user?id=1。我们使用该 URL 带上参数 id 来测试下如下代码:

70b348a7940252fdc61baa1e1fb27dbf.png

可以正常从控制台打印出 id 信息。同样地,URL 上面的参数和方法的参数需要一致,如果不一致,也需要使用 value 属性来说明,比如 URL 为:http://localhost:8080/user?idd=1。

61e480e657d0a35d342cd023c7c54d54.png

除了 value 属性外,还有两个属性比较常用。

968352f107463804c7f7e80f7daf6050.png

从 URL 中可以看出,@RequestParam 注解用于 GET 请求上时,接收拼接在 URL 中的参数。除此之外,该注解还可以用于 POST 请求,接收前端表单提交的参数,假如前端通过表单提交 username 和 password 两个参数,那我们可以使用 @RequestParam 来接收,用法和上面一样。

那么问题来了,如果表单数据很多,我们不可能在后台方法中写上很多参数,每个参数还要 @RequestParam 注解。针对这种情况,我们需要封装一个实体类来接收这些参数,实体中的属性名和表单中的参数名一致即可。

90caf0aaf571f0a654c6014077237590.png

当使用实体接收的话,我们不必在前面加 @RequestParam 注解,直接使用即可。

01ac97b9b7bab0b34a955319c3abdf7f.png

使用 Postman 再次测试一下表单提交,观察一下返回值和控制台打印出的日志即可。实际项目中,表单数据一般都有很多,这时需要封装一个实体类来接收表单数据。

5. @RequestBody

@RequestBody 注解用于接收前端传来的实体,接收参数也是对应的实体,比如前端通过 JSON 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用 @RequestBody 接收会非常方便。例如:

a5b2e6e48310a058a2d6e8a30931fd79.png

今天就分享到这,今日留言话题:Springboot中的MVC支持是不是很简单?对有价值的留言,我们都会一一回复的。如果觉得对你有一丢丢帮助,请点右下角【在看】,让更多人看到该文章。

5148b88387a2d63d08d51d030471dbd7.gif

268f83c5fb217695c4c28a80337b01de.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值