Search code examples
jsongrailsgrails-orm

Handling a hasMany relationship in a object marshaller


I'm in the process of writing a custom JSON object marshaller in Grails 2.2.4. The class that I'm trying to convert to JSON has both a belongsTo and a hasMany relationship. I can access the belongTo information presumably because the relationship is 1-* but I can't access the hasMany information in the same way. The following is the code I'm using:

JSON.registerObjectMarshaller( Event){
        Event event -> return [
            id : event.id,
            schoolName : event?.school?.name,
            teachers : [
                teacherName: event?.TEACHERS.toString(),
                ],
            ]
    }

the line teacherName: event?.TEACHERS.toString(), is there to prove that I can access the TEACHERS list which works. I think I need to be able to iterate over the list but I'm not sure how to go about doing that in this context.

Thanks


Solution

  • Couple options here:

    1) Set up a marshaller for Teacher. Then in the marshaller for Event, you can simply do:

    teachers : event?.teachers

    2) If you don't want to set up a marshaller for Teacher, then do this:

    JSON.registerObjectMarshaller(Event){ Event event -> 
        [ 
            id : event.id,
            schoolName : event?.school?.name,
            teachers : event.teachers.collect{ Teacher teacher ->
                [id: teacher.id, name: teacher.name]
            }
        ]
    }