Сообщество Hi Stack Overflow!
Я пытаюсь смоделировать микросервис в некоторых тестах интеграции Java.
Для этого я использую MockServer версии 5.5.1.Для выполнения остальных запросов я использую OkHttp версии 3.13.1
Код в java:
final SomeDTO requestObject = new SomeDTO(someParams);
final String jsonObject = objectMapper.writeValueAsString(requestObject);
final MediaType MEDIA_TYPE_JSON = MediaType.get("application/json; charset=utf-8");
final RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, jsonObject);
final Request request = new Request.Builder().url("serverUrl").post(requestBody).build();
final Response response = client.newCall(request).execute();
final String responseJson = response.body().string();
final ResultDTO result = objectMapper.readValue(responseJson, ResultDTO.class);
Это прекрасно работает.Однако, когда я присоединяю MockServer к устройству сопоставления:
final MockServerClient client = new MockServerClient("127.0.0.1", 1080);
client.when(request().withMethod("POST") //
.withPath("serverUrl") //
.withBody(json(correctJsonString, MatchType.ONLY_MATCHING_FIELDS))) //
.respond(response().withStatusCode(200) //
.withHeaders(new Header("Content-Type", "application/json; charset=utf-8"),
new Header("Cache-Control", "public, max-age=86400"))
.withBody(responseJson));
, я получаю request didn't match expectation because: body didn't match
, где разница между телами равна:
Запрос:
"body" : {
"type" : "STRING",
"string" : "{\"id\":33611,\"prop1\":28,\"prop2\":\"value2\",\"graph\":[...]}",
"contentType" : "text/plain; charset=utf-8"
}
Запрос должен соответствовать:
"body" : {
"type" : "JSON",
"json" : "{\"prop2\":\"value2\",\"prop1\":28,\"graph\":[...]}"
}
Итак, мои вопросы:
- Правильно ли предположить, что из-за типа
"JSON"
<-> "STRING"
тело нене совпадают? - Это неверная интерпретация MockServer или OkHttp генерирует неправильный запрос?(Сам запрос работает)
- Есть предложения как это исправить?