Вставленный вложенный элемент в сгенерированный JSON в Groovy / Grails - PullRequest
2 голосов
/ 09 марта 2012

Я использую Grails 2.1 для рендеринга JSON как части созданного мной RestFul API. Класс Domain, основанный на таблице SqlServer, выглядит следующим образом:

String firstName
Строка lastName
String officialAddress1
Строка officalAddress2
Строка предпочитаемый адрес1
Строка предпочитаемый адрес2
(так далее.). , ,

Что возвращает JSON, похожее на это:

{
"firstName": "Джо",
"lastName": "Hill",
"officialAddress1": "1100 Wob Hill",
"officialAddress2": "Apt. # 3",
"предпочитаемый адрес1": "1100 Wobbly Lane.",
"предпочитаемый адрес2": "Квартира 3."
}

Работает нормально, но клиент хочет, чтобы я вложил результаты таким образом:
{
"firstName": "Джо",
"lastName": "Hill",
предпочитаемый адрес {
"предпочитаемый адрес1": "1100 Wobbly Lane.",
"предпочитаемый адрес1": "Квартира 3."
}
официальный адрес {
"officialAddress1": "1100 Wob Hill",
"officialAddress2": "Apt. # 3"
}
}

Мой вопрос заключается в том, что, поскольку класс домена и база данных не являются структурой для возврата вложенного результата этого типа, как я могу легко изменить это в моем возвращенном JSON? Должен ли я отказаться от своего способа простой регургитации JSON, основанного на объекте базы данных / домена, и создать какой-то пользовательский конвертер?

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Я новичок в этом стековом потоке, и я надеюсь, что не испорчу его, но думаю, я знаю, что вам нужно. в вашем файле bootstrap.groovy вы найдете строку "def init = {servletContext ->" вставьте туда что-то вроде этого:

JSON.registerObjectMarshaller(YourDomainName) {
def returnArray = [:]
returnArray['firstName'] = it.firstName
returnArray['lastName'] = it.lastName
returnArray['preferredAddress'] = [it.preferredAddress1 ,it.preferredAddress2]
returnArray['officialAddress'] = [it.officialAddress1 ,it.officialAddress2]
return returnArray
}

теперь, когда вы используете рендер с JSON, как вы это делали, Grails будет выглядеть в начальной загрузке и сделать домен так, как вы просили.

надеюсь, это поможет

1 голос
/ 13 марта 2012

Отправленный ответ был правильным. Я просто хотел добавить небольшое изменение, которое я сделал, чтобы получить точные результаты, которые мне нужны:

Спасибо! Это сделал это. Я изначально, что это не будет работать именно так, как мне было нужно, но я был неправ. Я немного изменил синтаксис, чтобы получить нужные мне результаты.

        returnArray['preferredAddress'] = [address1: it.preferredAddress1?.trim(),
            address2: it.preferredAddress2?.trim(),
            address3: it.preferredAddress3?.trim(),
            city: it.preferredCity,
            state: it.preferredState,
            postCode: it.preferredPostCode,
            country: it.preferredCountry
            ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...