【发布时间】:2015-08-24 05:19:56
【问题描述】:
有一个场景如下,我需要验证 groovy 脚本的正确性。
class CostCalculator{
String name
String groovyScript
static constraints = {
groovyScript:static validateScript = {String script ,def obj->
boolean status = true
try {
def shell = new GroovyShell()
def data = shell.parse(script)
data.run()
}catch (Throwable e){
e.printStackTrace()
status = false
}
if(!status){
return "domain.script.compilation.errors"
}else{
return true
}
}
}
}
上面代码的问题是它运行代码,如果有任何异常,它会在运行时抛出它。
有几件事情需要考虑:
- groovy 代码应该编译而不是运行(因为代码可能包含数据库级别更新)并抛出异常。
- groovy 代码应该静态编译,例如,如果我们在脚本中缺少某些属性,那么它必须得到通知。
下面可能是示例脚本:
void addCost(int x, int y,String itemName){
double cost = x*y + originalCost
Item item = SoldItem.findByItemName(itemName)
item.price += cost
}
【问题讨论】: