Контракт Spring Cloud: использование URL в качестве параметра тела ответа - PullRequest
0 голосов
/ 24 марта 2020

В файле весеннего облачного контракта (groovy) у меня проблемы с извлечением сегмента URL-адреса запроса для использования его в качестве параметра в теле ответа, например

package contracts

import org.springframework.cloud.contract.spec.Contract

Contract.make {
    description "Should return OK "
    request {
        url "/discovery.svc/something(\'${value(consumer(regex(".*")),producer('defaultSomething'))}\')"
        method GET()
    }

    response {

        status 200
        body :
                value(
                        consumer(file("response/defaultSomething.xml").file.write(
                                String.format("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                                        "<entry xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" xmlns=\"http://www.w3.org/2005/Atom\" metadata:context=\"http://localhost:8082/discovery.svc/\$metadata#Environment/ContentServiceCapability\" xml:base=\"http://localhost:8082/discovery.svc\">\n" +
                                        "    <id>http://localhost:8082/discovery.svc/something('%1\$s')</id>\n" +
                                        "    <title></title>\n" +
                                        "    <summary></summary>\n" +
                                        "    <updated>2020-03-23T15:19:53.272668900Z</updated>\n" +
                                        "    <author>\n" +
                                        "        <name>SDL OData v4 framework</name>\n" +
                                        "    </author>\n" +
                                        "    <link rel=\"edit\" title=\"ContentServiceCapability\" href=\"something('%1\$s')\"></link>\n" +
                                        "    <link rel=\"http://docs.oasis-open.org/odata/ns/related/Environment\" type=\"application/atom+xml;type=entry\" title=\"Environment\" href=\"something('%1\$s')/Environment\"></link>\n" +
                                        "    <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Environment\" type=\"application/xml\" title=\"Environment\" href=\"something('%1\$s')/Environment/\$ref\"></link>\n" +
                                        "    <category scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" term=\"#Tridion.WebDelivery.Platform.ContentServiceCapability\"></category>\n" +
                                        "    <content type=\"application/xml\">\n" +
                                        "        <metadata:properties>\n" +
                                        "            <data:id>%1\$s</data:id>\n" +
                                        "            <data:LastUpdateTime metadata:type=\"Int64\">1580489088713</data:LastUpdateTime>\n" +
                                        "            <data:URI>http://localhost:8081/content.svc</data:URI>\n" +
                                        "            <data:ExtensionProperties metadata:type=\"#Collection(Tridion.WebDelivery.Platform.ContentKeyValuePair)\"></data:ExtensionProperties>\n" +
                                        "        </metadata:properties>\n" +
                                        "    </content>\n" +
                                        "</entry>", fromRequest().url().split('/')[-1].split('\'')[-2]))),
                        producer(file("response/defaultSomething.xml")))
        )
    }
}

, проблема в том, что fromRequest ( ) .url () не работает, и когда я пытаюсь вставить

print fromRequest().url()

в раздел ответа (для отладки), я получаю в результате:

DslProperty{
clientValue={{{request.url}}},
        serverValue={{{request.url}}}}

вместо простого строкового URL. .toString () тоже не помогает. У вас есть идеи, как я могу получить request.url в виде простой строки?

...