WireMock 不转换响应

WireMock does not transform response

我在使用 WireMock 时遇到问题,我扩展了 ResponseTransformer 并实现了所有必需的方法,它看起来像这样:

public class TempResponseTransformer extends ResponseTransformer {

    @Override
    public Response transform(Request request, Response response, FileSource fileSource,
                              Parameters parameters) {
        return Response.Builder.like(response).but().status(404).body("1").build();
    }

    @Override
    public boolean applyGlobally() {
        return false;
    }

    @Override
    public String getName() {
        return "temp-response-transformer";
    }
}

现在我想将这个特定的转换器应用到我写的存根之一,存根看起来像这样:

private static void initTempStub() {
    stubFor(post(urlPathEqualTo("/api/v1/temp"))
            .withHeader("AccessToken", matching("[a-zA-Z0-9]+"))
            .withHeader("CliendID", matching("[a-zA-Z0-9]+"))
            .withHeader("ClientSecret", matching("[a-zA-Z0-9]+"))
            .willReturn(aResponse()
                    .withTransformers("temp-response-transformer")));
}

当我开始服务并执行 post 调用时,我确实看到应用了转换器,但响应实际上没有被转换。 我也尝试在启动服务时在配置部分应用转换器,但它没有帮助。

所以我的问题是我应该如何正确应用 ReponseTransformer 才能改变我的回答?

好的,我想我已经弄明白了。 这是 WireMock 的一个问题(?),我在查看内部结构时能够弄清楚,这是我通过配置的方式:

new WireMockServer(wireMockConfig()
.extensions(TempResponseTransformer.class)
.options().notifier(new ConsoleNotifier(true)))

此代码的一个问题是,当您从 wireMockConfig 调用 options() 时,它会创建 WireMockConfig 的新实例,因此我不得不将此配置提取到单独的代码段中像这样:

    var wireMockConfig = new WireMockConfiguration();
    wireMockConfig
            .extensions(SamplesResponseTransformer.class)
            .notifier(new ConsoleNotifier(true));