为什么Grails命令对象会将BigDecimal类型转换为Integer?

为什么Grails命令对象会将BigDecimal类型转换为Integer?,grails,groovy,Grails,Groovy,因此,我有我的命令对象和我的类: class AddOnBodyCommand implements Validateable { BigDecimal addOnPrice } class AddOnController { def addAddOnAction(AddOnBodyCommand body) { log.info("price: $body.addOnPrice") } } 在以前的几页中,我一直在使用CommandObject,但从未出现过错误。但是现在

因此,我有我的命令对象和我的类:

class AddOnBodyCommand implements Validateable {
  BigDecimal addOnPrice
}
class AddOnController {
  def addAddOnAction(AddOnBodyCommand body) {
    log.info("price: $body.addOnPrice")
  }
}
在以前的几页中,我一直在使用CommandObject,但从未出现过错误。但是现在,我有一个表格,我需要一个大的十进制:

   <input type="number" step="0.01" id="newPriceAddOn" name="body.addOnPrice" value="0.55">

然而,当我提交表格时,记录员说价格是55美元

我可以使用param.price而不是CommandObject来修复这个问题,但是我想使用CommandObject,因为代码看起来更干净,我可以在CommandObject类中进行验证。有什么想法吗


要复制问题:请在输入中键入1123.45。log.info将打印112345而不是1123.45

我认为HTML
输入的名称应该是“addOnPrice”而不是“body.addOnPrice”。@PuneetBehl如果我重命名输入名称,过滤器将不会读取该值。所以它不会通过验证,AddOnBodyCommand也没用^^我不确定我是否理解,您在这里指的是哪个过滤器。下面是示例Grails4应用程序,它演示了
BigDecimal
正确绑定到对象@PuneetBehl当我谈论过滤器时,我指的是我的CommandObject addonbody命令。因此,当.gsp输入中的名称为:'body.addOnPrice',并且我提交了该表单,并且调用了控制器AddOnController时,grails params变量有一个包含addOnPrice的“body”。“body”将满足我想在AddOnBodyCommand中声明的所有约束。@PuneetBehl我看到了您的项目,但不幸的是您没有使用命令对象,因此它对我没有用处:(.我也在使用Grails 3.3.9。)