将 header 添加到所有请求

Add header to all requests

有什么方法可以为所有请求添加 header 吗?

我必须为所有请求添加一个 header。在生产环境中,header 由代理添加。

在所有测试中手动添加此 header 很烦人。

您的请求是否使用 FeignClient?

如果你是,并且你的测试定义了一个名为 test 的配置文件,你可以使用这样的东西:

@Configuration
public class FeignRequestConfiguration {

    @Bean
    @Profile("test")
    public RequestInterceptor feignRequestInterceptorTest() {
        return (RequestTemplate requestTemplate) -> {
            requestTemplate.header("Some-Header", "Some-Value");
        };
    }
}

正如@pvpkiran 所建议的那样,我已经创建了过滤器

public class AddHeadersFilter implements Filter {

    @Override
    public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
        requestSpec.header(new Header(IntegrationBaseTest.HEADER_USER_NAME, "test-user"));

        return ctx.next(requestSpec, responseSpec);
    }

}

然后我将它添加到所有测试中

    @BeforeClass
    public static void configureRestAssured() {
        RestAssured.filters(new AddHeadersFilter());
    }

似乎有效。

我还添加了(我希望)有用的配置

        HeaderConfig headerConfig = headerConfig()
                .overwriteHeadersWithName(HEADER_USER_NAME);
        RestAssured.config().headerConfig(headerConfig);

所以有一种方法可以在某些测试中覆盖 header

使用下面的代码。使用 RequestSpecBuilder 你可以实现这个。

RequestSpecBuilder reqbuild=new RequestSpecBuilder();
        //Adding values like path parameters
        reqbuild.addPathParam("customers", "12212");
        reqbuild.addHeader("Content-Type", "application/json");
        requestSpecfication=reqbuild.build();

    given().spec(requestSpecfication).when().get("{customers}/").then().spec(responseSpecification).log().all();