在 Wiremock 中使用 ResponseTransformer 始终得到空响应
Always get empty response by using ResponseTransformer in wiremock
我在使用 Wiremock 时遇到问题。我需要从请求正文中获取一个字段并将其显示在响应中。
据我了解,我需要扩展 Response Transformer class,然后在 stubFor 方法中使用此转换器。但是当我尝试它时,我总是得到空洞的回应。另外我不确定如何从请求正文中只获取一个字段,因为只有 getBodyAsString()
方法。
我的请求是这样的
{
"command":"doThis",
"id":"asfksdjdskj85495848"
}
这是我的代码,只是为了 return 所有请求正文的响应
@Override
public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource fileSource, Parameters parameters) {
return new ResponseDefinitionBuilder()
.like(responseDefinition)
.but()
.withBody(request.getBodyAsString())
.build();
}
@Override
public boolean applyGlobally() {
return false;
}
@Override
public String getName() {
return "idTransformer";
}
...
stubFor(post(urlEqualTo("/commands"))
.withHeader("token", matching(".*"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withTransformers("idTransformer")));
我在日志中看到了这个
匹配的响应定义:
{
"status" : 200,
"transformers" : [ "idTransformer" ]
}
但是响应总是空的。您能否告知我做错了什么以及如何从请求正文中仅获取一个字段 "id"
?
我发现我的代码有错误。我为 .extension 使用了错误的地方。这是正确的代码
public class myMock {
private static WireMockServer wireMockServer;
public static void main(String args[]){
wireMockServer = new WireMockServer(WireMockConfiguration.
options().notifier(new
ConsoleNotifier(true)).extensions(IdTransformer.class));
stubFor(post(urlEqualTo("/api/commands/vehicles/FAKEBMWVEHICLE001"))
.willReturn(aResponse()
.withTransformers("idTransformer")
));
}
我在使用 Wiremock 时遇到问题。我需要从请求正文中获取一个字段并将其显示在响应中。
据我了解,我需要扩展 Response Transformer class,然后在 stubFor 方法中使用此转换器。但是当我尝试它时,我总是得到空洞的回应。另外我不确定如何从请求正文中只获取一个字段,因为只有 getBodyAsString()
方法。
我的请求是这样的
{
"command":"doThis",
"id":"asfksdjdskj85495848"
}
这是我的代码,只是为了 return 所有请求正文的响应
@Override
public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource fileSource, Parameters parameters) {
return new ResponseDefinitionBuilder()
.like(responseDefinition)
.but()
.withBody(request.getBodyAsString())
.build();
}
@Override
public boolean applyGlobally() {
return false;
}
@Override
public String getName() {
return "idTransformer";
}
...
stubFor(post(urlEqualTo("/commands"))
.withHeader("token", matching(".*"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withTransformers("idTransformer")));
我在日志中看到了这个
匹配的响应定义:
{
"status" : 200,
"transformers" : [ "idTransformer" ]
}
但是响应总是空的。您能否告知我做错了什么以及如何从请求正文中仅获取一个字段 "id"
?
我发现我的代码有错误。我为 .extension 使用了错误的地方。这是正确的代码
public class myMock {
private static WireMockServer wireMockServer;
public static void main(String args[]){
wireMockServer = new WireMockServer(WireMockConfiguration.
options().notifier(new
ConsoleNotifier(true)).extensions(IdTransformer.class));
stubFor(post(urlEqualTo("/api/commands/vehicles/FAKEBMWVEHICLE001"))
.willReturn(aResponse()
.withTransformers("idTransformer")
));
}