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.