json传参数和表单传参

最近使用http请求测试接口,传参数格式给了自己狠狠大的困惑今天花时间总结下。

当你的controller使用post接收请求的时候 传参一般是 封装类 和封装的对象 需要注解@RequestBody @RequestParam 才能接收到json的参数 不然是接收不到的比如

两个接口

@ApiOperation(value = "登录")
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public ViewResult login(@RequestBody UserRequest userRequest) {
    return userService.login(userRequest);
}
    
​
@ApiOperation(value = "登录")
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public ViewResult login(UserRequest userRequest) {
    return userService.login(userRequest);
}

http请求 当你的idea使用http cliect发请求时

第一个接口接收到参数 第二个可以接收不到参数

###
POST http://localhost:6688/gzl-oauth/oauth/login
Content-Type: application/json
Authorization:
​
{
  "account": "gzlwork",
  "password": "gzlwork"
​
}

第一个接口接收不到参数 第二个可以接收到参数

###
POST http://localhost:6688/gzl-oauth/oauth/login
Content-Type: application/x-www-form-urlencoded
​
account=gzlwork&password=gzlwork
​
​
###
POST http://localhost:6688/gzl-oauth/oauth/login?account=gzlwork&password=gzlwork
Content-Type: application/x-www-form-urlencoded
​
这两种发送参数的方式没有区别

当你传参数时 封装类单个参数的时候

@ApiOperation(value = "登录")
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public ViewResult login(@RequestParam(name) String name) {
    return userService.login(name);
}
    
​
@ApiOperation(value = "登录")
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public ViewResult login(String name) {
    return userService.login(name);
}

接口都可以接收到参数的,

###
POST http://localhost:6688/gzl-oauth/oauth/loginForm
Content-Type: application/x-www-form-urlencoded
Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJhY2NvdW50XCI6XCJnemx3b3JrXCIsXCJhdmF0YXJcIjpcIiQyYSQxMCRuTlU5NUhwUlMzZHUuSWRxTFl3NjB1VVlFUlBkM1RicHhmM2k5ZTZTaWJpbFJ6SWh6ZmxMdVwiLFwiYmlydGhkYXlcIjpcIjIwMTgtMDgtMDhUMDA6MDA6MDBcIixcImNvZGVcIjpcIkQwMDAxXCIsXCJjcmVhdGVEZXB0XCI6MCxcImNyZWF0ZVRpbWVcIjpcIjIwMTgtMDgtMDhUMDA6MDA6MDBcIixcImNyZWF0ZVVzZXJcIjowLFwiZGVwdElkXCI6XCIxXCIsXCJlbWFpbFwiOlwiMTgzMzA4MDg4NDFAMTYzLmNvbVwiLFwiaWRcIjo0LFwiaXNEZWxldGVkXCI6MCxcIm5hbWVcIjpcIndyb2tcIixcInBhc3N3b3JkXCI6XCIkMmEkMTAkUnlqQnYxZEhBdEdNNUZnY25rZFVUTzlISmFLTEZ4RmZMb1RWL1FlcnZEdVd5dkhiZHFWOVdcIixcInBob25lXCI6XCIxODMzMDgwODg0MVwiLFwicG9zdElkXCI6XCIxXCIsXCJyZWFsTmFtZVwiOlwiaGVyb1wiLFwicm9sZUlkXCI6XCIxXCIsXCJzZXhcIjoxLFwic3RhdHVzXCI6MSxcInRlbmFudElkXCI6XCIwMDAwMDBcIixcInVwZGF0ZVRpbWVcIjpcIjIwMTgtMDgtMDhUMDA6MDA6MDBcIixcInVwZGF0ZVVzZXJcIjowfSIsIm5iZiI6MTcyNDQ5MDg2MDQyOCwiaXNzIjoiZ3psIiwiZXhwIjoxNzI0NTc3MjYwNDI4LCJpYXQiOjE3MjQ1NzcyNjAsImp0aSI6IjFmMDBlNmQ1ZjBkNDQyZGI4OTk0MTkxMWYyZWI5ZTAzIn0.CU8or9ClcO6phMyWcYRf8eRaUBh4m1_taPDNNFT6FHo
​
name=gzlwork

第一个接口接收到参数 第二个接口接收不到参数

###
POST http://localhost:6688/gzl-oauth/oauth/loginForm
Content-Type: application/json
Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJhY2NvdW50XCI6XCJnemx3b3JrXCIsXCJhdmF0YXJcIjpcIiQyYSQxMCRuTlU5NUhwUlMzZHUuSWRxTFl3NjB1VVlFUlBkM1RicHhmM2k5ZTZTaWJpbFJ6SWh6ZmxMdVwiLFwiYmlydGhkYXlcIjpcIjIwMTgtMDgtMDhUMDA6MDA6MDBcIixcImNvZGVcIjpcIkQwMDAxXCIsXCJjcmVhdGVEZXB0XCI6MCxcImNyZWF0ZVRpbWVcIjpcIjIwMTgtMDgtMDhUMDA6MDA6MDBcIixcImNyZWF0ZVVzZXJcIjowLFwiZGVwdElkXCI6XCIxXCIsXCJlbWFpbFwiOlwiMTgzMzA4MDg4NDFAMTYzLmNvbVwiLFwiaWRcIjo0LFwiaXNEZWxldGVkXCI6MCxcIm5hbWVcIjpcIndyb2tcIixcInBhc3N3b3JkXCI6XCIkMmEkMTAkUnlqQnYxZEhBdEdNNUZnY25rZFVUTzlISmFLTEZ4RmZMb1RWL1FlcnZEdVd5dkhiZHFWOVdcIixcInBob25lXCI6XCIxODMzMDgwODg0MVwiLFwicG9zdElkXCI6XCIxXCIsXCJyZWFsTmFtZVwiOlwiaGVyb1wiLFwicm9sZUlkXCI6XCIxXCIsXCJzZXhcIjoxLFwic3RhdHVzXCI6MSxcInRlbmFudElkXCI6XCIwMDAwMDBcIixcInVwZGF0ZVRpbWVcIjpcIjIwMTgtMDgtMDhUMDA6MDA6MDBcIixcInVwZGF0ZVVzZXJcIjowfSIsIm5iZiI6MTcyNDQ5MDg2MDQyOCwiaXNzIjoiZ3psIiwiZXhwIjoxNzI0NTc3MjYwNDI4LCJpYXQiOjE3MjQ1NzcyNjAsImp0aSI6IjFmMDBlNmQ1ZjBkNDQyZGI4OTk0MTkxMWYyZWI5ZTAzIn0.CU8or9ClcO6phMyWcYRf8eRaUBh4m1_taPDNNFT6FHo
​
{
  "account":"gzlwork"
}

Content-Type: application/json 模式接口实现时需要添加@RequestBody @RequestParam 注解 接口才能接收到http传的json数据

如果没有添加注解 默认的是Content-Type: application/x-www-form-urlencoded 表单提交 我们也能注意到 当使用@RequestParam注解的时候,使用表单提交参数也是能接收到参数的

### 使用JMeter通过POST方法参数 为了在JMeter中使用POST请求并参数,可以按照如下方式配置HTTP请求采样器: #### 配置HTTP请求采样器 1. 添加一个`HTTP Request Sampler`到测试计划中的线程组下。 2. 设置服务器名称或IP地址以及端口号(如果适用),这些信息取决于目标Web服务的位置。 对于发送带有参数的POST请求而言,在HTTP请求采样器中有两个主要部分需要注意设置:Method Parameters/Body Data. - **Method**: 将其设为 `POST`. - **Parameters 或 Body Data**: 如果要发送表单数据,则可以在“Send Files With the Request”未选的情况下利用“Parameters”选项卡来定义键值对形式的数据。每一对代表一个单独的字段及其对应的值[^1]. 对于JSON或其他类型的负载体,应该取消勾选 "Use multipart/form-data" 并切换至 “Body Data”,在这里可以直接输入完整的payload字符串,比如 JSON 格式的对象或者 XML 文档等[^2]. ```json { "username": "${__RandomString(8,abcdefg)}", "password": "mypassword" } ``` 上述例子展示了如何构建动态用户名,并将其作为JSON的一部分提交给服务器。这里`${}`语法用于访问内置函数或自定义变量,这使得能够灵活地控制每次迭代时所使用的具体数值[^3]。 另外值得注意的是,当涉及到复杂的场景如文件上或是需要处理大量并发连接池的情况时,可能还需要调整高级别的配置项,例如采用合适的HttpClient实现类以优化性能表现[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值