Estaba tratando de implementar la burla de la llamada POST REST usando el servidor Wiremock Standalone. Me enfrento a un desafío como este, supongamos que el cuerpo de la publicación contiene un campo de "nombre" y su valor, el mismo valor debe devolverse en la respuesta de esa llamada POST. Mi archivo json se ve así:
{ "priority": 1, "request": { "method": "POST", "urlPath": "/primeSlots", "bodyPatterns" : [ { "matchesJsonPath" : "{ \"things\": [ { \"name\": \"794363\" }] }" } ] }, "response": { "status": 200, "body": "{{$.things.name.value}}", "transformers": ["response-template"] } }entonces, necesito obtener el valor, que es 794363, pero al usar el enfoque anterior no puedo obtenerlo en el cuerpo de la respuesta posterior.
Intenté esto también:
{ "request": { "method": "POST", "urlPath": "/transform", "bodyPatterns": [ { "matchesJsonPath" : "$.things[?(@.name =~ /[0-9]+/i)]" } ] }, "response": { "status": 200, "body": "{\"responseName\": \" {{request.body.things.name.value}}\"}", "headers": { "Content-Type": "application/json" }, "transformers": ["body-transformer"] } }Entonces, mi pregunta es, incluso si uso un regEx, que coincide con cualquier número que viene en la solicitud, ¿cómo devolver el mismo número en la respuesta usando el archivo json independiente de Wiremock? Gracias.
Desafortunadamente, el transformador de plantillas de respuesta de WireMock actualmente no divide el cuerpo de la solicitud en un mapa, como sería necesario para lo que está tratando de hacer. El cuerpo de la solicitud es solo una cadena.
La forma más sencilla de habilitar esto probablemente sea escribir un asistente de Handlebars que implemente JSONPath o algún otro mecanismo para consultar un documento JSON y luego registrarlo con el transformador de plantillas cuando inicialice WireMock.
En algún momento escribiré handlebars helpers para hacer este tipo de cosas para XML y JSON, pero eso no será por un tiempo.
Hoy estuve en la misma situación que tú y encontré una solución que me gustaría compartir contigo:
ResponseDefinitionTransformerArrays.stream(StringHelpers.values()).forEach(helper -> this.handlebars.registerHelper(helper.name(), helper));java -cp "-cp ".\lib\wiremock-standalone-2.5.1.jar;.\lib\customTransformer.jar" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --extensions "your.name.CustomTransformer" (para Linux use : en lugar de ; como separador de classpath) En caso de que tenga varios transformadores, simplemente defina todos aquellos usando , (coma) como separador en el --extensions .