目录
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 已经可以达到我们的⽬的了, 我们为什么还要加 @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
完
如果哪里有疑问的话欢迎来评论区指出和讨论,如果觉得文章有价值的话就请给我点个关注还有免费的收藏和赞吧,谢谢大家!