JMeter中PUT请求携带含方括号的JSON请求体时发送后返回错误
问题背景
使用JMeter发起PUT类型接口请求时,配置请求体为带方括号的数组结构JSON,具体内容为:
[{ "myval":"9", "value1":"10000" }]
请求发送完成后,服务端返回错误响应,内容为:
{"status":9999,"message":"Something went wrong"}
核心问题表现
通用错误码9999无具体错误指向,当PUT请求携带的JSON请求体为带外层方括号的数组结构时,服务端无法正常完成解析处理
排查思路
- 检查请求头配置:确认是否在HTTP信息头管理器中配置了匹配的
Content-Type头,JMeter发送PUT请求时默认的内容类型多为application/x-www-form-urlencoded,与JSON类型的请求体不匹配时,服务端无法正确识别请求格式,会触发通用异常。 - 校验请求体格式合法性:检查复制到JMeter消息体数据栏的JSON是否存在隐形字符,比如全角方括号、不可见Unicode编码、多余换行空格等问题,这类问题会导致JSON结构解析失败。
- 核对接口入参定义:对照接口文档确认当前PUT接口的入参模型,是否真的支持直接接收数组结构的请求体;部分接口定义的入参为单个JSON对象,传入数组结构会触发序列化失败,抛出通用错误。
- 核对实际发送的请求内容:通过JMeter查看结果树的请求详情面板,确认实际发出的请求体与配置的内容完全一致,排除被前置控制器、参数化组件意外篡改请求内容的情况。
可行解决方案
- 修正请求头配置:新增HTTP信息头配置,将
Content-Type的值设置为application/json;charset=UTF-8,匹配JSON请求体的编码类型。 - 匹配接口入参结构:如果接口要求接收单个对象结构,就去掉请求体外层的方括号,直接传入对象结构
{"myval":"9","value1":"10000"};如果接口明确要求传入数组结构,则保留当前的数组格式。 - 清理请求体隐形字符:手动重新输入请求体内容,或者通过JSON格式化工具将内容处理为无多余字符的合法结构,排除编码或隐形字符导致的解析失败问题。
- 开启请求编码配置:在HTTP请求的高级配置栏勾选"使用编码"选项,确保请求体以UTF-8编码发送,避免编码不兼容导致的服务端解析异常。
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

