升级wiremock-jre8-standalone 3.0.1后ResponseTemplateTransformer报错及自定义模板问题
WireMock 3.0.1 升级后ResponseTemplateTransformer报错及自定义响应模板指南
一、解决「Expected 4 arguments but found 3」错误
WireMock 3.x 版本对ResponseTemplateTransformer的实例化方式做了变更,不再支持直接调用仅传global参数的构造函数,而是推荐使用Builder模式来创建实例,它会自动填充构造函数所需的默认参数(如默认模板引擎、空文件源、空模板数据提供者列表)。
把你当前代码里的:
.extensions(new ResponseTemplateTransformer(true))
替换为:
.extensions(ResponseTemplateTransformer.builder().global(true).build())
二、添加自定义响应模板
要添加自定义模板变量或逻辑,需要实现TemplateModelDataProviderExtension接口,再将其注册到ResponseTemplateTransformer中,步骤如下:
- 实现自定义模板数据提供者
public class CustomTemplateDataProvider implements TemplateModelDataProviderExtension { @Override public Map<String, Object> provideTemplateModel(Request request, ResponseDefinition responseDefinition, FileSource fileSource) { Map<String, Object> customData = new HashMap<>(); // 这里添加你的自定义变量或逻辑,比如自定义时间格式 customData.put("customDate", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 也可以添加自定义方法或复杂对象 return customData; } @Override public String getName() { return "custom-template-provider"; // 给你的扩展命名 } }
- 在WireMock配置中注册自定义扩展
@Rule WireMockRule wireMockServer = new WireMockRule(WireMockConfiguration .options() .notifier(new ConsoleNotifier(false)) .dynamicPort() .extensions(ResponseTemplateTransformer.builder() .global(true) .withTemplateModelDataProviders(new CustomTemplateDataProvider()) // 注册自定义提供者 .build()) .notMatchedRenderer(new CustomPlainTextStubNotMatchedRenderer()));
- 在Stub中使用自定义模板
在响应体里直接引用自定义变量即可:
stubFor(get(urlEqualTo("/custom-template-test")) .willReturn(aResponse() .withBody("当前自定义格式时间:{{customDate}}") .withTransformers("response-template")));
内容的提问来源于stack exchange,提问作者Prabitha
相关产品推荐
相关产品推荐

