当前位置: 首页 > news >正文

SpringMVC (2)

目录

1. @RequestMapping 注解介绍

2. @RequestMapping 使用

3. @RequestMapping与请求方式

3.1 @RequestMapping 支持Get和Post类型的请求

3.2 @RequestMapping 指定接收某种请求

3.3 @GetMapping和@PostMapping

4. 传参

4.1 通过查询字符串传参

4.2 在 Body 中传参

4.2.1 x-www-form-unlencoded

​编辑4.2.2 form-data

4.2.3 raw



1. @RequestMapping 注解介绍

@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的
路由映射的.
表示服务收到请求时, 路径为 /user/m1 的请求就会调⽤ m1 这个⽅法的代码.
路由映射: 当用户访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.
既然 @RequestMapping 已经可以达到我们的⽬的了, 我们为什么还要加 @RestController
呢?
Spring会对所有的类进⾏扫描, 如果类加了注解 @RestController , Spring才会去看这个类⾥⾯的⽅法有没有加 @RequestMapping 这个注解, 当然他的作⽤不⽌这⼀点, 后⾯再详细讲

2. @RequestMapping 使用

@RequestMapping 既可修饰,也可以修饰方法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径.

如上图,类路径为 /user ,方法路径为 /m1 。

因此访问的地址为:http://127.0.0.1:8080/user/m1

【注意】

@RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果前⾯没有加 / , Spring会拼接上⼀个 /

像上面这个例子就是路径不加斜杠

如果加上斜杠程序也能正常运行:


@RequestMapping 的URL路径也可以是多层路径, 最终访问时, 依然是 类路径 + 方法路径

访问的地址为:http://127.0.0.1:8080/user/m1/say/hi

3. @RequestMapping与请求方式

3.1 @RequestMapping 支持Get和Post类型的请求

@RequestMapping 支持 Get 请求还是支持 Post 请求?

我们使用浏览器访问 URL 时,发送的请求类型就是 Get 类型,使用fiddler抓包可以查看:

因此 @RequestMapping 肯定是支持 Get 类型的请求的,那么他支不支持 Post 请求呢?

此处需要使用 Postman 来构造 Post 请求:

使用 Postman 发送 Post 类型请求,可以正常返回 Hello world ,说明 @RequestMapping 也支持 Post 类型的请求。

3.2 @RequestMapping 指定接收某种请求

我们可以指定 @RequestMapping 来只接收一种请求:

以上代码指定了只有 Get 请求才能访问该路径

因此发送 Get 请求可以正常访问并响应:

如果发送 Post 请求则会出错:

用上述方法依此类推,可以单独支持8种类型的请求:

3.3 @GetMapping和@PostMapping

除了上述给 @RequestMapping 指定接收某种请求,还有两种注解可以指定接收 Get 和 Post 请求

@GetMapping 只支持 Get 请求,@PostMapping 只支持 Post 请求 :

使用Postman验证,m3只支持Get:

m3不支持Post:

m4只支持Post:

m4不支持Get:

4. 传参

4.1 通过查询字符串传参

URL的格式如下:

    @RequestMapping("/r2")public String r2(String keyword){return "接收参数:keyword:"+keyword;}

方法只能从()内的参数中获取到参数的值,而参数的值来自于请求时传入的参数:

传入多个参数:

    @RequestMapping("/r3")public String r3(String username,String password){return "username:"+username+"\npassword:"+password;}

请求也要传入对应的多个参数:

【注意】

传参时参数名要 一 一 对应,否则没有对应到的参数将自动赋值 null :

4.2 在 Body 中传参

使用查询字符串传参时,参数会显示在URL中:

如果不想让参数显示在URL中,我们也可以在 Body 传参。

4.2.1 x-www-form-unlencoded

此处使用的传参方式是 x-www-form-urlencoded :

在此处可以选择。

x-www-form-urlencoded 可以传入表单数据,

对应 Content-Type: application/x-www-from-urlencoded

传入 username 和 password :

此时参数就不会显示在URL上,而是在请求的 Body 里,使用 fiddler 抓包可以看到:

【注意】

① 在 Body 传参时,请求方法需要改为 Post ,否则服务端无法获取到参数:

② Integer 和 int 作为参数的区别

方法 r4 使用 Integer 接收参数,方法 r5 使用 int 接收参数:

相同点

① 都能正常传入数字

Integer:

int :

② 传入非数字值会出错:

Integer:原因:字符串“aaa”不能复制给Integer类型

int :原因:字符串“aaa”不能赋值给int类型

不同点

Integer 类型可以不传值,而 int 类型必须传值。

原因:当请求中没有给参数传值时,后端方法中的参数会自动给参数赋值null,Integer 是包装类型,可以赋值 null ,而 int 类型不能赋值 null。

Integer:

int :

4.2.2 form-data

表单提交的数据, 在 form 标签中加上 enctyped="multipart/form-data" , 通常⽤于提交图片/⽂件. 对应 Content-Type: multipart/form-data

此处可以选择传入表单,或者文件:

4.2.3 raw

可以上传任意格式的⽂本,可以上传text、json、xml、html


如果哪里有疑问的话欢迎来评论区指出和讨论,如果觉得文章有价值的话就请给我点个关注还有免费的收藏和赞吧,谢谢大家!

http://www.lryc.cn/news/523358.html

相关文章:

  • 【Vim Masterclass 笔记16】S07L32 + L33:同步练习09 —— 掌握 Vim 宏操作的六个典型案例(含点评课内容)
  • 爬楼梯问题(Leetcode 第70题)
  • 6.5 正定矩阵
  • verilog笔记1
  • 游戏引擎学习第81天
  • git系列之revert回滚
  • 监控与调试:性能优化的利器 — ShardingSphere
  • LLVM - 编译器前端 - 理解BNF(巴科斯-诺尔范式)
  • 服务化架构 IM 系统之应用 MQ
  • ELF2开发板(飞凌嵌入式)基本使用的搭建
  • Appium(四)
  • 简单的sql注入 buuctf
  • Ubuntu 24.04 LTS 空闲硬盘挂载到 文件管理器的 other locations
  • <电子幽灵>开发笔记:BAT基础笔记(一)
  • PiliPalaX ( 第三方安卓哔哩哔哩)
  • 在亚马逊云科技上高效蒸馏低成本、高精度的Llama 3.1 405B模型(上篇)
  • Amazon MSK 开启 Public 访问 SASL 配置的方法
  • LeetCode_438.找到字符串中所有字母异位词
  • 一文读懂服务器的HBA卡
  • Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化
  • 深度学习 Pytorch 基本优化思想与最小二乘法
  • C# 实现系统信息监控与获取全解析
  • Transformer详解:Attention机制原理
  • 网络安全技术深度解析与实践案例
  • JavaScript中提高效率的技巧一
  • 美食推荐系统 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离
  • ThinkPHP 8的一对多关联
  • Django简介与虚拟环境安装Django
  • Redis延迟队列详解
  • 一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用