使用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
相关产品推荐
相关产品推荐

