Когда мы конвертируем List или Set в XML с помощью поддержки сортировки Grails XML, именем корневого элемента является либо <list> либо <set> .  Мы можем изменить это имя, расширив org.codehaus.groovy.grails.web.converters.marshaller. xml.CollectionMarshaller  org.codehaus.groovy.grails.web.converters.marshaller. xml.CollectionMarshaller .  Мы должны переопределить метод supports() чтобы обозначить тип коллекции, для которой мы хотим настроить имя корневого элемента.  И мы должны переопределить метод getElementName() который возвращает фактическое имя корневого элемента для List или Set . 
  Давайте сначала посмотрим вывод по умолчанию коллекции классов домена Book .  В контроллере у нас есть следующий код: 
| 01 02 03 04 05 06 07 08 09 10 11 | packagecom.mrhaki.grails.sample classSampleController {    def list() {        // To force 404 when no results are found        // we must return null, because respond method        // checks explicitly for null value and         // not Groovy truth.        respond Book.list()    }} | 
Вывод XML:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xmlversion="1.0"encoding="UTF-8"?><list>  <bookid="1"version="0">    <authorid="1"/>    <isbn>      0451169514    </isbn>    <numberOfPages>      1104    </numberOfPages>    <title>      It    </title>  </book>  <bookid="2"version="0">    <authorid="1"/>    <isbn>      0307743683    </isbn>    <numberOfPages>      1472    </numberOfPages>    <title>      The stand    </title>  </book></list> | 
  Чтобы изменить list имен элементов на books мы добавляем следующий код к закрытию init в grails-app/app/BootStrap.groovy : 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // File: grails-app/conf/BootStrap.groovyimportcom.mrhaki.grails.sample.Bookimportgrails.converters.XMLimportorg.codehaus.groovy.grails.web.converters.marshaller.xml.CollectionMarshallerclassBootStrap {    def init = { servletContext ->        // Register custom collection marshaller for List with Book instances.        // The root element name is set to books.        XML.registerObjectMarshaller(newCollectionMarshaller() {            @Override            publicbooleansupports(Object object) {                // We know there is at least one result,                 // otherwise the controller respond method                // would have returned a 404 response code.                object instance of List && object.first() instance of Book            }            @Override            String getElementName(finalObject o) {                'books'            }        })    }} | 
  Теперь, когда мы отображаем список экземпляров Book мы получаем следующий XML: 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xmlversion="1.0"encoding="UTF-8"?><books>  <bookid="1"version="0">    <authorid="1"/>    <isbn>      0451169514    </isbn>    <numberOfPages>      1104    </numberOfPages>    <title>      It    </title>  </book>  <bookid="2"version="0">    <authorid="1"/>    <isbn>      0307743683    </isbn>    <numberOfPages>      1472    </numberOfPages>    <title>      The stand    </title>  </book></books> | 
  Чтобы настроить вывод XML-маршалинга для коллекций Map мы должны org.codehaus.groovy.grails.web.converters.marshaller.xml.MapMarshaller подкласс org.codehaus.groovy.grails.web.converters.marshaller.xml.MapMarshaller . 
Код, написанный с помощью Grails 2.3.2.