@RequsetMapping、@GetMapping、@PostMapping获取参数的方式

目录

 1、使用@PathVariable注解:  

 2、使用@RequestParam注解

 3、通过POJO(实体类)获取请求参数

 4、通过ServletAPI获取参数(不推荐)

      什么时候用GET,什么时候用POST?


遇到这个问题时查了许多博主的信息,此处仅为个人方面的总结(汇总但并不全面)

参考来源:

【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获取参数的方法相差不大。详情如下:

【IDEA】@RequestMapping与@GetMapping、@PostMapping的区别_峰子的番茄肥牛的博客-CSDN博客https://blog.csdn.net/weixin_63453779/article/details/131605701?spm=1001.2014.3001.5502

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里找到账户、密码了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值