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

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

Можно ли это сделать?

0
Witt 25 Окт 2019 в 15:09

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, чтобы изменить содержимое, и это почти все.

0
Marcin Grzejszczak 27 Окт 2019 в 21:45