grails:最小约束和BigDecimal类型的属性(类型不匹配?)

时间:2011-10-26 19:25:14

标签: grails constraints min

在grails类中,我指定了

BigDecimal  amount

表示交易中的金额。

然后,在约束部分,我指定:

amount      ( nullable:false, min : 100)

表示接受的最低金额为1美元。这编译得很好,但运行时抛出了类型不兼容错误:

2011-10-26 15:17:06,116 [main] ERROR validation.ConstrainedProperty  - Exception thrown applying constraint [min] to class [class com.mycorp.mypkg.MyProprietaryDefinition] for value [100]: Parameter for constraint [min] of property [amount] of class [class  com.mycorp.mypkg.MyProprietaryDefinition] must be the same type as property: [java.math.BigDecimal]

我是否安全地假设我无法在BigDecimal属性上指定最小值?

谢谢!

阿里克斯

3 个答案:

答案 0 :(得分:7)

Grails希望 min max 值与关联属性的数据类型相同,而 scale 值始终需要为整数。转换为BigDecimal或将.0添加到值的末尾可以解决问题。

amount(nullable: false, min: 100.0, max: 9999.99, scale: 2)

我最近就此问题提交了IntelliJ IDEA错误报告IDEA-75471。如果 min max 值不是整数且 scale 值与数据类型不同,则IDEA 10.5.2错误地标记检查警告属性。使用//noinspection GroovyAssignabilityCheck可以忽略警告。

答案 1 :(得分:2)

对最小值的常规强制转换也应该有效。

 min: 0 as BigDecimal

或可能

 min: 0G

答案 2 :(得分:0)

有趣。我在BigDecimal属性上指定的任何“min”值都被拒绝了。我将它们全部评论出来,并成功部署了应用程序。我尝试将“.0”添加到一分钟值的末尾,然后重新构建并重新部署应用程序。我一个接一个地重复这个,除了最后评论的分钟。所以然后我将它取消注释,min:0,应用程序崩溃了。

所以我猜这就是答案,如果你的min(或者max,我也假设)没有小数部分,你需要添加一个。