POST REST WiremockStandaloneサーバーを使用して呼び出しのモックを実装しようとしました。このような課題に直面しています。投稿の本文に「名前」が含まれているとします。 "フィールドとその値、そのPOST呼び出しの応答で同じ値が返される必要があります。私のjsonファイルは次のようになります:
{
"priority": 1,
"request": {
"method": "POST",
"urlPath": "/primeSlots",
"bodyPatterns" : [ {
"matchesJsonPath" : "{ \"things\": [ { \"name\": \"794363\" }]
}"
} ]
},
"response": {
"status": 200,
"body": "{{$.things.name.value}}",
"transformers": ["response-template"]
}
}
したがって、値、つまり794363を取得する必要がありますが、上記のアプローチを使用すると、応答後の本文で取得できません。
私もこれを試しました:
{
"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"]
}
}
だから私の質問は、リクエストに含まれる任意の番号と一致する正規表現を使用している場合でも、Wiremockスタンドアロンjsonファイルを使用して応答で同じ番号を返す方法はありますか?ありがとう。
残念ながら、WireMockの応答テンプレートトランスフォーマーは、現在、実行しようとしていることに必要なように、リクエストの本文をマップに分割していません。リクエストの本文は1つの文字列です。
これを有効にする最も簡単な方法は、JSONPathまたはJSONドキュメントをクエリするための他のメカニズムを実装するHandlebarsヘルパーを作成し、WireMockを初期化するときにこれをテンプレートトランスフォーマーに登録することです。
ある時点で、XMLとJSONに対してこの種のことを行うためのハンドルバーヘルパーを作成しますが、それはしばらくの間はありません。
今日、私はあなたと同じ状況にあり、あなたと共有したい解決策を見つけました:
ResponseDefinitionTransformer
を拡張する独自のクラスを作成しますArrays.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"
(Linuxの場合、クラスパス区切り文字として:
の代わりに;
を使用します)複数のトランスフォーマーがある場合は、,
(コンマ)を--extensions
引数の区切り文字として使用してすべてのトランスフォーマーを定義するだけです。