У меня есть следующий сценарий генерации контракта:
VALID_JSON_STRING = '{}'
[
Contract.make {
name("insertSomething_ShouldReturnHttp200")
description("POST should do sth")
request {
method 'POST'
url REQUEST_URL
body(
value: VALID_JSON_STRING
)
headers {
contentType(applicationJson())
}
}
response {
status 200
headers { contentType(applicationJson()) } }
}
]
Но он компилируется в:
@Test
public void insertSomething_ShouldReturnHttp200() throws Exception {
// given:
MockMvcRequestSpecification request = given()
.header("Content-Type", "application/json")
.body("{\"value\":{}}");
// when:
ResponseOptions response = given().spec(request)
.post("...");
// then:
assertThat(response.statusCode()).isEqualTo(200);
assertThat(response.header("Content-Type")).matches("application/json.*");
}
Обратите внимание на .body("{\"value\":{}}"); здесь.
Вместо этого должен быть .body("{\"value\":\"{}\"}");. Он не должен преобразовывать строку JSON в фактический JSON. Как мне предотвратить это?
EDIT: It was labeled as a bug now: https://github.com/spring-cloud/spring-cloud-contract/issues/652
@YogendraMishra Нет, тогда я бы вернул код 204 без тела. Я возвращаю тело со свойством, содержащим строку JSON. Сценарий использования для этого - имитация базы данных NoSQL в SQL до тех пор, пока мы не сможем перейти к реальной базе данных NoSQL.




Каков фактический контракт вашей конечной точки API в Controller, вы пишете облачный контракт для пустого тела?