Это мой весенний контракт в заводном файле:
package com.stubs.contracts
import org.springframework.cloud.contract.spec.Contract
[
Contract.make {
description "Stub for my endpoint"
request {
method POST()
url("/rest/v1/value/validate") {
}
headers {
contentType applicationJson()
}
body(
file("Request_validate_200.json")
)
}
response {
body(
file("Response_validate_200.json")
)
headers {
contentType applicationJson()
}
status OK()
}
}
]
Мой вопрос: как переопределить значение для тела ответа?
Я хочу: 1) загрузить файл с запросом JSON 2) взять значение атрибута "id" из этого запроса 3) заменить свойство значения "id" в загруженном ответе JSON
Можно ли это сделать?
1 ответ
Вы не можете сделать это из коробки. Вы можете поиграть с загрузчиками классов, как мы это делаем за кулисами здесь (https://github.com/spring-cloud/spring- cloud-contract/blob/master/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/Common.java#L243-L255) . Другими словами, вы можете создать замыкание следующим образом:
Closure fileLocation = { String relativePath ->
URL resource = Thread.currentThread().getContextClassLoader()
.getResource(relativePath);
if (resource == null) {
throw new IllegalStateException("File [" + relativePath + "] is not present");
}
try {
return new File(resource.toURI());
}
catch (URISyntaxException ex) {
throw new IllegalStateException(ex);
}
}
}
Вызовите fileLocation("Response_validate_200.json")
, чтобы получить File
, затем преобразуйте его в String
, например fileLocation("Response_validate_200.json").text
, затем используйте JsonSlurper
, чтобы проанализировать его new groovy.json.JsonSlurper().parseText(fileLocation("Response_validate_200.json").text)
. Из этого вам придется поиграть с slurper, чтобы изменить содержимое, и это почти все.
Похожие вопросы
Новые вопросы
rest
REST (Transfer State Transfer) - это стиль архитектуры программного обеспечения для распределенных гипермедиа систем, таких как World Wide Web. Его популярность возросла по сравнению с архитектурами RPC, такими как SOAP, из-за внутренней разобщенности клиента с сервером, возникающей из-за наличия единого интерфейса между гетерогенными системами.