Spring Cloud Contract - трансформирующийся ответ в Groovy DSL - PullRequest
0 голосов
/ 25 октября 2019

Это мой весенний контракт в файле groovy:

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 Ответ

0 голосов
/ 27 октября 2019

Вы не можете сделать это из коробки. Вы могли бы поиграться с загрузчиками классов, как мы это делаем за кулисами здесь (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). Из-за этого вам придется поиграться с блесном, чтобы изменить содержимое, и это в значительной степени.

...