grails命令对象验证中的不一致性
我有以下带有约束的命令对象:grails命令对象验证中的不一致性,grails,grails-2.2,grails-validation,Grails,Grails 2.2,Grails Validation,我有以下带有约束的命令对象: @Validateable class RefundCommand{ private static final Logger log = Logger.getLogger(RefundCommand.class) Double amount String order_id MerchantAccount merchant OrderReference order String unique_request_id
@Validateable
class RefundCommand{
private static final Logger log = Logger.getLogger(RefundCommand.class)
Double amount
String order_id
MerchantAccount merchant
OrderReference order
String unique_request_id
public void getDerivedValues() {
this.order = OrderReference.findByOrderIdAndMerchantId(order_id, merchant.merchantId)
}
static constraints = {
amount nullable: false, validator: {amount, cmd->
if(cmd.amount <= 0) {
log.info("Amount must be greater than 0. Given value: ${cmd.amount}")
return ['invalid.amount']
}
}
}
}
当我最初部署验证时,validate()始终返回true,hasError()返回null
由于我们正在使用nginx,如果我在命令文件中做了任何更改,那么在自动编译验证之后就可以开始工作了
原因可能是什么
我们在nginx服务器上使用grails-2.2.2。首先,忘记nginx并对grails进行故障排除。确保验证工作持续进行;每一次。然后,也只有在那时,才介绍nginx。如果问题只在nginx发挥作用时出现,那么显然nginx正在做一些事情,这会把事情搞砸,您需要对此进行故障排除。问题现在解决了,我们在config.groovy中有@validateable with class&还有“grails.validateable.classes”…从config.groovy中删除这个类就完成了工作。
def refund = {RefundCommand cmd->
def String orderId = params.orderId
def String merchantId = params.merchant.merchantId
def Double amount = params.amount.toDouble()
OrderReference orderReference = OrderReference.findByOrderIdAndMerchantId(orderId, merchantId)
MerchantAccount merchantAccount = MerchantAccount.findByMerchantId(merchantId)
cmd.order_id = orderId
cmd.merchant = merchantAccount
cmd.order = orderReference
cmd.amount = amount
cmd.unique_request_id = "rf_" + util.generateUniqueReference()
cmd.clearErrors()
cmd.validate()
log.info(cmd.dump())
if(cmd.hasErrors()) {
.....
return
}
proceedForRefund()
}