With Grails we get a lot of extra support for handling request parameters. We can convert a request parameter value to a specific type with a simple method invocation. Grails adds for example the method int() to the parameter so we can return the request parameter value converted to an int. Grails adds several methods like byte(), long(), boolean() we can use in our code. And since Grails 2.0 also support for dates.
Update: it is also possible to get the values from request parameters with the same name.
class SimpleController {
def submit = {
def intValue = params.int('paramInt')
def shortValue = params.short('paramShort')
def byteValue = params.byte('paramByte')
def longValue = params.long('paramLong')
def doubleValue = params.double('paramDouble')
def floatValue = params.float('paramFloat')
def booleanValue = params.boolean('paramBoolean')
[ intValue: intValue, shortValue: shortValue,
byteValue: byteValue,
longValue: longValue, doubleValue: doubleValue,
floatValue: floatValue, booleanValue: booleanValue ]
}
}
We can run the following testcase to test the various parameter types and values.
import grails.test.*
class SimpleControllerTests extends ControllerUnitTestCase {
void testParams() {
controller.params.paramInt = '42'
controller.params.paramShort = '128'
controller.params.paramByte = '8'
controller.params.paramLong = '90192'
controller.params.paramDouble = '12.3'
controller.params.paramFloat = '901.22'
controller.params.paramBoolean = 'true'
def result = controller.submit()
assertEquals 42, result.intValue
assertEquals 128, result.shortValue
assertEquals 8, result.byteValue
assertEquals 90192L, result.longValue
assertEquals 12.3, result.doubleValue
assertEquals 901.22f, result.floatValue
assertTrue result.booleanValue
}
void testInvalidParams() {
controller.params.paramInt = 'test'
def result = controller.submit()
assertNull result.intValue
}
void testBooleanParam() {
controller.params.paramBoolean = 'false'
def result = controller.submit()
assertFalse result.booleanValue
}
}