Groovy JSON Builder необходимо удалить пробелы - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь создать JSON, используя Groovy JSON builder. Код, используемый в качестве сценария в JSR223, выглядит следующим образом: Используемый код:

**def previousResponse = new groovy.json.JsonSlurper().parse(ctx.getPreviousResult().getResponseData())
@groovy.transform.Immutable
class Package {
    String ReferenceId
    String Name
    String Version
    Integer Size
}
def packages = previousResponse.Packages.collect { Package -> new Package(Package.ReferenceId, Package.Name, Package.LastVersion.Version, Package.LastVersion.Size) }
def builder = new groovy.json.JsonBuilder()
builder(HasDraftVersion: false,
        IsApprovalPending: null,
        IsInstalledSilently: true,
        LastModified: "/Date(1535570626907)/",
        LastModifiedBy: "Administrator",
        DeviceConfigurations: [],
        Packages: packages.collect(),
        LdapTargets: null,
        ReferenceId: null,
        DeviceFamily: 6,
        DeviceFamilyQualification: 0,
        Name: "test",
        Description: "",
        Random: "2018-08-29T15:16:47",
        IsPublicAPI: true)
sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('',builder.toString(),'')
sampler.setPostBodyRaw(true);        

The result I am getting from the above code is correct and is in the format:

{ "HasDraftVersion" ложь "IsApprovalPending": нулевой, "IsInstalledSilently": правда, "LastModified": "/ Date (1535661532840) /", "LastModifiedBy": "Администратор", "DeviceConfigurations": [], "Пакеты": [{ "идентификаторСсылка": "282812e7-c3e6-4ecb-8267-bbe2c250ad59", "версия": "1,0", "размер": 10465294, "имя": "10MB", "packageDependencies" : ""}, { "идентификаторСсылки": "02f5b531-8e37-42c1-bfcb-ec8db0920bed", "вариант": "1.0", "размер": 104884390, "название": "100MB", "packageDependencies": "" }], "LdapTargets": нулевой, "идентификаторСсылки": нулевой, "DeviceFamily": 6, "DeviceFamilyQualification": 0, "Имя": "работа", "Описание": "", "Random": "2018-08 -30T04: 38: 52" , "IsPublicAPI": истинный}

Проблема, с которой я сталкиваюсь, связана с последовательностью меток и такими значениями, как последовательность для тега Packages:

ReferenceID, Имя, Версия ПакетЗависимости

Ошибка, которую я получаю при передаче следующего HTTP-запроса:

{"Данные": null, "ErrorCode": 0, "ErrorMessage": "Параметр 'ReferenceId' имеет недопустимое значение ''.", "HelpLink": null, "InnerErrors": [{"Data ": [" ReferenceId "," "]," ErrorCode ": 2," ErrorMessage ":" Параметр 'ReferenceId' имеет недопустимое значение ''. "," HelpLink ": null," InnerErrors ": null," Ref ": "2018-08-30 16: 38: 52.9245-04: 00"}], "Ссылка": "2018-08-30 16: 38: 52.9245-04: 00"}

Идентификатор ReferenceId передается, и результат для него тот же.

1 Ответ

0 голосов
/ 03 сентября 2018

Похоже, Groovy преобразует имена карт в соответствие соглашение об именах

Таким образом, чтобы сохранить эти параметры ReferenceID и друзей такими, какие они есть, а не в случае верблюда, вам нужно изменить эту строку:

Packages: packages.collect()

с этими:

Packages: packages.collect() {
     [
             ReferenceId        : it.ReferenceId,
             Name               : it.Name,
             Version            : it.Version,
             PackageDependencies: "",
             Size               : it.Size
     ]
 },

Полный код на всякий случай:

def previousResponse = new groovy.json.JsonSlurper().parse(ctx.getPreviousResult().getResponseData())

@groovy.transform.Immutable
class Package {
    String ReferenceId
    String Name
    String Version
    Integer Size
}

def packages = previousResponse.Packages.collect { Package -> new Package(Package.ReferenceId, Package.Name, Package.LastVersion.Version, Package.LastVersion.Size) }

def builder = new groovy.json.JsonBuilder()

builder(HasDraftVersion: false,
        IsApprovalPending: null,
        IsInstalledSilently: true,
        LastModified: "/Date(1535570626907)/",
        LastModifiedBy: "Administrator",
        DeviceConfigurations: [],
        Packages: packages.collect() {
            [
                    ReferenceId        : it.ReferenceId,
                    Name               : it.Name,
                    Version            : it.Version,
                    PackageDependencies: "",
                    Size               : it.Size
            ]
        },
        LdapTargets: null,
        ReferenceId: null,
        DeviceFamily: 6,
        DeviceFamilyQualification: 0,
        Name: "test",
        Description: "",
        Random: "2018-08-29T15:16:47",
        IsPublicAPI: true)

sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('',builder.toPrettyString(),'')
sampler.setPostBodyRaw(true);               

Дополнительная информация:

...