Grails - grails.converters.JSON - removing the class name Grails - grails.converters.JSON - removing the class name json json

Grails - grails.converters.JSON - removing the class name


Here is yet one way to do it.I've added a next code to the domain class:

static {    grails.converters.JSON.registerObjectMarshaller(Employee) {    return it.properties.findAll {k,v -> k != 'class'}    }}

But as I found if you have used Groovy @ToString class annotation when you also must add 'class' to excludes parameter, e.g.:

@ToString(includeNames = true, includeFields = true, excludes = "metaClass,class")


My preferred way of doing this:

def getAllBooks() {    def result = Book.getAllBooks().collect {        [            title: it.title,            author: it.author.firstname + " " + it.author.lastname,            pages: it.pageCount,        ]    }    render(contentType: 'text/json', text: result as JSON)}

This will return all the objects from Book.getAllBoks() but the collect method will change ALL into the format you specify.


One alternative is to not use the builder:

def myAction = {    def emp = new Employee()    emp.lastName = 'Bar'    render(contentType: 'text/json') {        id = emp.id        lastName = emp.lastName    }}

This is a bit less orthogonal since you'd need to change your rendering if Employee changes; on the other hand, you have more control over what gets rendered.