Доступ к параметрам запроса из registerObjectMarshaller () в BootStrap - PullRequest
0 голосов
/ 05 ноября 2011

Я выполняю маршалинг объектов в Grails в JSON, используя метод JSON.registerObjectMarshaller(), который вызывается в классе BootStrap.

В графе моего объекта есть ряд вложенных объектов, например, Пользователь -> Адрес -> Телефон иУ меня есть маршаллер для каждого объекта.

У меня есть сценарий, в котором я хочу иметь возможность вернуть «мелкую» или «глубокую» версию объекта верхнего уровня.В случае поверхностного запроса, вместо адреса я хочу вернуть поле.В случае с глубокой версией другие маршалеры объекта могут выполнять делегирование как обычно.

Я хочу сделать глубокое сравнение с мелким на основе значения параметра, переданного в запросе, однако я не делаюзнать, как получить доступ к параметрам запроса в методе registerObjectMarshaller() из класса BootStrap.

Если у меня есть способ доступа к этим параметрам, я могу настроить его по мере необходимости.

Любые указатели будутс благодарностью.

1 Ответ

0 голосов
/ 07 ноября 2011

Однажды я попробовал подход к объектному маршаллеру для XML, и, к сожалению, он не сработал. Как и у вас, у меня нет одного способа представлять объекты. У меня их больше двух, но я думаю, что Маршаллеры Объектов - это путь, только если вы хотите сделать что-то тривиальное. Если вам нужно больше, просто забудьте о них. Вам может быть гораздо проще создать сервис или класс со статическими методами, которые будут генерировать JSON для вас на основе значений, которые вы передаете.

Вы можете использовать JsonGroovyBuilder для достижения этой цели, а затем просто преобразовать его в строку и обернуть в красивый заголовок http или что-нибудь еще, что вам нужно. В моем случае это выглядит так [учтите, это для XML, поэтому вы должны использовать JsonGroovyBuilder или другое - в зависимости от того, что вам подходит - и вам, вероятно, не понадобится использовать StringWriter, как я]:

    def writer = new StringWriter()
    def xml = new MarkupBuilder(writer)

    def retData = someService.doSomething()

    def xmlGen = new XmlResponseGenerator(xml, retData)
    render(contentType: 'text/xml', encoding: "UTF-8", text: writer.toString())
...