loading...

DataBinding and GORM objects

joemccall86 profile image Joe McCall Originally published at joemccall86.gitlab.com on ・1 min read

In Groovy, you are able to do this:

class Widget {
  String name
}

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

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

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

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

Posted on by:

joemccall86 profile

Joe McCall

@joemccall86

Groovy/Grails enthusiast, Kubernetes neophyte, Pursuing a master's in CS.

Discussion

markdown guide