You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RestAssured发起REST请求时JSON值空格被截断的问题

解决RestAssured发送POST请求时JSON字段连续空格被截断的问题

问题核心

使用RestAssured发送包含连续空格的JSON请求体时,next字段内的3个连续空格被自动压缩为1个,导致请求无法通过校验。该问题通常源于请求体经过对象序列化处理或文件读取方式不当,破坏了原始字符串的空格格式。

可行解决方案

1. 直接发送原始JSON字符串

绕过对象序列化步骤,直接读取JSON文件的原始内容作为请求体,确保空格完全保留:

import java.nio.file.Files;
import java.nio.file.Paths;

// 读取JSON文件为原始字符串,保留所有格式
String jsonBody = new String(Files.readAllBytes(Paths.get("你的JSON文件路径")));

Response response = given()
    .relaxedHTTPSValidation()
    .urlEncodingEnabled(true)
    .filter(logFilter)
    .header("Authorization", token)
    .header("x-consumer-id", consumerIDHeader)
    .header("x-correlation-id", correlationIDHeader)
    .header("Accept-Language", "en-CA")
    .header("Accept", "*/*")
    .header("Cache-Control", "no-cache")
    .header("Accept-Encoding", "gzip, deflate, br")
    .header("Content-Type", "application/json")
    .body(jsonBody) // 直接传入未处理的原始字符串
    .when()
    .post(postrcsTransactions);

System.out.println(response);

2. 配置Jackson序列化器(若用POJO构造请求体)

如果通过POJO对象生成JSON请求体,需确保Jackson序列化器不修改字符串内的连续空格。默认情况下Jackson不会处理这类空格,可显式配置避免意外:

import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper mapper = new ObjectMapper();
// 禁用可能干扰字符串内容的不必要配置
mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);

// 将POJO序列化为保留原始空格的JSON字符串
String jsonBody = mapper.writeValueAsString(yourPojoInstance);

// 后续请求代码同上述示例

3. 验证实际请求内容

通过抓包工具(如Charles、Wireshark)确认实际发送的请求体,排查是否是日志组件自动压缩空格导致的显示误解(部分日志工具会简化空格显示,但实际请求内容是正确的)。


内容的提问来源于stack exchange,提问作者sarath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:08:29