@RequsetMapping、@GetMapping、@PostMapping获取参数的方式
目录
遇到这个问题时查了许多博主的信息,此处仅为个人方面的总结(汇总但并不全面)
参考来源:
【Day1】简介、@RequestMapping注解、获取请求参数的方式_SOS团团员A的博客-CSDN博客https://blog.csdn.net/qq_34332616/article/details/120321519springboot 中 Getmapping获取参数的方式_getmapping接收参数_暗里着迷°的博客-CSDN博客https://blog.csdn.net/FengLiu0077/article/details/124129047@RequestParam注解的详细介绍 - tomingto - 博客园 (cnblogs.com)https://www.cnblogs.com/tomingto/p/11377138.html
@GetMapping、@PostMapping只是@RequsetMapping的一个延申,前者只能响应HTTP 的GET请求,后者只能响应HTTP 的POST请求,其获取参数的方法与使用@RequsetMapping获取参数的方法相差不大。详情如下:
1、使用@PathVariable注解:
可以接收请求路径中的参数,配置简单
与在@RequestMapping中定义的参数顺序有关,与执行方法的参数列表顺序无关。在不定义@PathVariable中的Value值时,要保持{url参数名称}与方法参数名称一致。
@RequestMapping("/test01/{name}/{pass}")
@ResponseBody
public String test_Request(@PathVariable String pass,@PathVariable String name){
return "name: "+name+"<br/>pass: "+pass;
}
另外,要注意是“ localhost:8088/test01/张三/123”,不要习惯地在写上了
“ localhost:8088/test01?name=张三&pass=123”,使用“ / ”是@PathVariable的特点。
若定义了@PathVariable中的value值,则必须将自定义的名称与{url参数名称}保持一致
//此处将 name 改为 new_name
@RequestMapping("/test01/{new_name}/{pass}")
@ResponseBody
public String test_Request(@PathVariable String pass,
@PathVariable(value = "new_name") String name){
return "name: "+name+"<br/>pass: "+pass;
}
2、使用@RequestParam注解
用于将指定的请求参数赋值给方法中的形参。
有三个属性:
(1)value:请求参数名(默认为自定义的方法参数名称)
(2)required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)
(3)defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)
在未使用@RequestParam前,访问浏览器 带参数 和 不带参数 的返回值
@RequestMapping("/test02")
@ResponseBody
public String test_RequsetParam(String name){ return name; }
此处返回空值
使用@RequestParam后,但不设置任何属性
@RequestMapping("/test02")
@ResponseBody
public String test_RequsetParam(@RequestParam String name){ return name; }
再次访问浏览器
在不带参访问时则会抛出异常
原因就是在不设定任何属性的情况下,required的默认值为true,在为true的情况下请求中必须包含该参数,如果没有包含,将会抛出异常。
这时候就可以以设置默认值default的方式阻止抛出异常
@RequestMapping("/test02")
@ResponseBody
public String test_RequsetParam(@RequestParam(defaultValue = "default000") String name){ return name; }
而value的用法与@PathVariable中的value用法相似
@RequestMapping("/test02")
@ResponseBody
public String test_RequsetParam(@RequestParam(value = "new_name") String name){ return name; }
3、通过POJO(实体类)获取请求参数
html代码
<body>
<form method="get" action="/test03">
Dog实体类<br/><br/>
name:<input type="text" name="name"><br/>
age:<input type="text" name="age">
<input type="submit">
</form>
</body>
pojo层
public class Dog {
private String name;
private int age;
//此处省略getter、setter以及toString方法
}
controller层
@RequestMapping("/test03")
@ResponseBody
public String test_Pojo(Dog dog){ return dog.toString(); }
填写并提交:
4、通过ServletAPI获取参数(不推荐)
将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。
<body>
<form method="get" action="/test04">
Dog实体类<br/><br/>
name:<input type="text" name="name"><br/>
age:<input type="text" name="age">
<input type="submit">
</form>
</body>
@RequestMapping("/test04")
@ResponseBody
public String test_ServiceAPI(HttpServletRequest request){
return (request.getParameter("name")+request.getParameter("age"));
}
getParameter方法只能获取到同名参数的第一个,若要获取同名的参数列表应该使用getParameterValues。
什么时候用GET,什么时候用POST?
GET方法:客户端与服务端之间是读取操作(如搜索、读、查询操作)。
POST方法:
1.交互是一个命令或订单(order),比提问包含更多信息
2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务
3.用户需要对交互产生的结果负责
根据HTTP协议规定,GET方法可以携带交互需要的所有数据,因此你会看到搜索百度或谷歌的时候,点击搜索形成的URL包含了你刚才的搜索关键字,没有安全需求的请求把信息放URL里没关系,但是你访问银行网站的时候,不希望把账户、密码这些放在URL里被人拦截是吧,所以HTTP设计了POST请求,他可以把请求信息放在HTTP请求里,具体格式这里不细说了,这样你就不能简单的从URL里找到账户、密码了。
更多推荐
所有评论(0)