Однажды я попробовал подход к объектному маршаллеру для 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())