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

RestAssured+Java:如何从请求日志中排除指定字段?

自定义RestAssured过滤器排除指定请求字段日志

要解决请求体中content_encoded字段日志过大的问题,你可以自定义一个请求日志过滤器,在记录日志前移除该字段。以下是完整示例代码:

1. 自定义请求日志过滤器

import io.restassured.filter.Filter;
import io.restassured.filter.FilterContext;
import io.restassured.response.Response;
import io.restassured.specification.FilterableRequestSpecification;
import io.restassured.specification.FilterableResponseSpecification;
import org.json.JSONObject;

public class CustomRequestLoggingFilter implements Filter {

    private final RequestLoggingFilter delegate = new RequestLoggingFilter();

    @Override
    public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
        // 只处理JSON类型的请求体
        if (requestSpec.getBody() != null && "application/json".equals(requestSpec.getContentType())) {
            try {
                // 将请求体转为JSON对象
                JSONObject requestBody = new JSONObject(requestSpec.getBody().toString());
                
                // 移除指定字段:data -> files -> data数组中的content_encoded
                if (requestBody.has("data")) {
                    JSONObject dataObj = requestBody.getJSONObject("data");
                    if (dataObj.has("files")) {
                        JSONObject filesObj = dataObj.getJSONObject("files");
                        if (filesObj.has("data")) {
                            // 遍历files.data数组,移除每个元素的content_encoded字段
                            for (int i = 0; i < filesObj.getJSONArray("data").length(); i++) {
                                JSONObject fileItem = filesObj.getJSONArray("data").getJSONObject(i);
                                fileItem.remove("content_encoded");
                            }
                        }
                    }
                    // 更新请求体(仅用于日志记录,不影响实际发送的请求)
                    requestSpec.body(requestBody.toString());
                }
            } catch (Exception e) {
                // 解析失败时直接使用原请求体日志
                e.printStackTrace();
            }
        }
        // 调用默认的RequestLoggingFilter记录处理后的日志
        return delegate.filter(requestSpec, responseSpec, ctx);
    }
}

2. 替换原有过滤器

修改你的setUpRequestSpec方法,用自定义过滤器替换默认的RequestLoggingFilter:

public RequestSpecification setUpRequestSpec() {
    return given()
            .header("Content-Type", "application/json")
            .header("PTToken", ProjectData.practiTestConfigs.ptToken())
            .filters(new CustomRequestLoggingFilter(), new ResponseLoggingFilter());
}

说明

  • 这个过滤器只会修改日志输出的请求体,不会改变实际发送给服务器的请求内容,因为我们只是在日志记录前临时修改了requestSpec的body,实际请求的body还是原始数据。
  • 如果请求体解析JSON失败(比如格式错误),会 fallback 到默认的日志记录逻辑,避免影响测试流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:58:25