Grails 通过类型检查将数据绑定到非域 class
Grails bind data to non-domain-class with type checking
我正在寻找一种简单的方法来检查我的参数中的某些类型。如果它们存在,它们应该有特定的类型,如果不存在,它们应该有一个默认值。如果它们存在并且类型错误,则应该抛出异常。
之后将这些值放在一个方便的容器中会很好。因此,我尝试将 params
传递给容器的构造函数,并将 bindData
传递给容器对象。两者都不成功:
class ContainerClass {
Integer foo = 42;
}
class TestController {
def index(){
//doesn't throw, **even when params.foo = "2asdf3"**
ContainerClass meh = new ContainerClass();
bindData(meh, params);
println meh.foo //prints 42 when params.foo = "2asdf3"
// throws GroovyCastException: Cannot cast object '23' with class
// 'java.lang.String' to to class 'java.lang.Integer',
// **even when params.foo = "23"**
ContainerClass meh2 = new ContainerClass(params);
render "meh"
}
}
如果这很重要,我正在使用 grails 3。
您可以使用命令对象将参数绑定到特定数据类型。
参考:http://docs.grails.org/latest/guide/single.html?utm_content=bufferf77f5&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer#commandObjects
如果您想在某些数据类型不匹配时抛出异常,则需要明确检查。
我正在寻找一种简单的方法来检查我的参数中的某些类型。如果它们存在,它们应该有特定的类型,如果不存在,它们应该有一个默认值。如果它们存在并且类型错误,则应该抛出异常。
之后将这些值放在一个方便的容器中会很好。因此,我尝试将 params
传递给容器的构造函数,并将 bindData
传递给容器对象。两者都不成功:
class ContainerClass {
Integer foo = 42;
}
class TestController {
def index(){
//doesn't throw, **even when params.foo = "2asdf3"**
ContainerClass meh = new ContainerClass();
bindData(meh, params);
println meh.foo //prints 42 when params.foo = "2asdf3"
// throws GroovyCastException: Cannot cast object '23' with class
// 'java.lang.String' to to class 'java.lang.Integer',
// **even when params.foo = "23"**
ContainerClass meh2 = new ContainerClass(params);
render "meh"
}
}
如果这很重要,我正在使用 grails 3。
您可以使用命令对象将参数绑定到特定数据类型。 参考:http://docs.grails.org/latest/guide/single.html?utm_content=bufferf77f5&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer#commandObjects
如果您想在某些数据类型不匹配时抛出异常,则需要明确检查。