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
相关产品推荐
相关产品推荐

