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

WireMock中如何创建多个响应转换器并为其命名?

WireMock多响应转换器配置:创建并命名第二个转换器

我懂你现在的痛点——已经写了第二个响应转换器的代码,但不知道怎么给它命名让WireMock识别,还不清楚怎么在存根里调用两个转换器对吧?咱们一步步把这个问题解决掉。

首先,你的test2转换器代码最关键的缺失部分是实现getName()方法,这是WireMock用来识别每个转换器唯一标识的核心。每个自定义响应转换器都必须通过这个方法返回一个独特的名称,这样你才能在存根配置里精准指定它。

完善第二个转换器的代码

把你的代码补全成这样(注意类名最好遵循Java命名规范,比如改成Test2ResponseTransformer):

public class Test2ResponseTransformer extends ResponseDefinitionTransformer {
    // 你定义的成员变量
    private String message;
    private boolean value;

    // 转换器的核心转换逻辑,处理请求和原始响应定义
    @Override
    public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource fileSource, Parameters parameters) {
        // 这里写你的具体转换逻辑:比如修改响应体、添加响应头、替换变量等
        // 举个简单例子:给响应添加自定义头部
        return ResponseDefinitionBuilder.from(responseDefinition)
                .withHeader("X-Transformer-Test2", message)
                .build();
    }

    // 关键:返回转换器的唯一名称,存根配置里要用这个名字
    @Override
    public String getName() {
        return "test2-transformer"; // 这个名称你可以自定义,只要唯一就行
    }

    // 可选:如果要让这个转换器全局生效(对所有请求),可以返回true,默认是false
    @Override
    public boolean applyGlobally() {
        return false;
    }
}

注册多个转换器到WireMock

接下来要把两个转换器都注册到WireMock实例中:

  • Java API启动方式:在创建WireMockServer时,把两个转换器都传入extensions()方法:
// 假设你的第一个转换器是FirstResponseTransformer
WireMockServer wireMockServer = new WireMockServer(wireMockConfig()
        .extensions(new FirstResponseTransformer(), new Test2ResponseTransformer()));
wireMockServer.start();

在存根里调用两个转换器

不管是用Java API还是JSON配置存根,都可以指定多个转换器的执行顺序:

  • Java API配置存根:
wireMockServer.stubFor(get(urlEqualTo("/test-endpoint"))
        .willReturn(aResponse()
                .withStatus(200)
                .withBody("Original Body")
                .withTransformers("first-transformer-name", "test2-transformer"))); // 按顺序执行
  • JSON配置文件(mappings目录下的文件):
{
  "request": {
    "method": "GET",
    "url": "/test-endpoint"
  },
  "response": {
    "status": 200,
    "body": "Original Body",
    "transformers": ["first-transformer-name", "test2-transformer"], // 顺序就是执行顺序
    "transformerParameters": {
      // 如果需要给转换器传参数,可以在这里定义
      "message": "Hello from Test2"
    }
  }
}

几个要注意的点

  • 转换器名称必须和getName()返回的字符串完全匹配,大小写敏感
  • WireMock会按照transformers数组里的顺序依次执行转换器,第一个转换器先处理原始响应,第二个再处理第一个转换后的结果
  • 如果你的转换器需要接收参数,可以在transform方法里通过parameters对象获取,比如parameters.getString("message")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:09:36