DataBinding and GORM objects

joemccall86

Joe McCall

Posted on May 20, 2020

DataBinding and GORM objects

In Groovy, you are able to do this:

class Widget {
  String name
}

def widget = new Widget(name: '')
assert widget.name == ''

Enter fullscreen mode Exit fullscreen mode

When this widget is a GORM object (in a Grails application), the default configuration doesn’t allow for this:

// Inside grails-app/domain
class PendingDeletion {
  String name
  String path
}

// Elsewhere in code
def pendingDeletion = new PendingDeletion(name: 'foo', path: '')
assert pendingDeletion.path == '' // Fails; pendingDeletion.path is null

Enter fullscreen mode Exit fullscreen mode

This is because the default configuration instructs the Grails data-binder to convert empty strings to null 1.

I’m not exactly sure why this is the default. In order to make the above snippet work in your Grails application, specify the following in application.yml:

grails:
  databinding:
    convertEmptyStringsToNull: false

Enter fullscreen mode Exit fullscreen mode

This allows the GORM map constructor to behave the same as a normal POGO map constructor.

Alternatively, just do not use the GORM map constructor when the field values can be null.

  1. http://docs.grails.org/3.3.9/ref/Constraints/nullable.html
💖 💪 🙅 🚩
joemccall86
Joe McCall

Posted on May 20, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

DataBinding and GORM objects
grails DataBinding and GORM objects

May 20, 2020