放心+Java。如何从请求日志中排除特定字段?

问题描述 投票:0回答:1

我使用 RestAssured 过滤器来获取请求和响应日志。以下方法可以做到这一点:

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

当请求发送时,会显示所有请求和响应日志,但问题是在请求正文中有一个字段,其中我发送了 Base64 格式的图片,它看起来有数千个字符。如何仅从请求日志中排除带有 Base64 图片的该字段?

据我所知,我必须为此目的编写一个自定义过滤器......也许有人可以举个例子。

java rest-assured
1个回答
0
投票

解决方案1:使用

RequestLoggingFilter
来记录具体请求中的哪一部分。 详情

import static io.restassured.filter.log.LogDetail.*;

...

.filters(
   RequestLoggingFilter.with(URI, METHOD, HEADERS, PARAMS), 
   new ResponseLoggingFilter()
);

解决方案2:编写自定义RequestLoggingFilter,例如记录URI

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 java.io.PrintStream;

public class CustomRequestLoggingFilter implements Filter {

    private final PrintStream stream;

    public CustomRequestLoggingFilter(PrintStream stream) {
        this.stream = stream;
    }

    public CustomRequestLoggingFilter() {
        this.stream = System.out;
    }

    @Override
    public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
        String uri = requestSpec.getURI();
        stream.println("uri: " + uri);
        return ctx.next(requestSpec, responseSpec);
    }
}

要在客户端代码中使用它:

.filters(new CustomRequestLoggingFilter(), new ResponseLoggingFilter());
© www.soinside.com 2019 - 2024. All rights reserved.