killme2008 / aviatorscript

A high performance scripting language hosted on the JVM.
http://fnil.net/aviator/
4.51k stars 839 forks source link

5.2.6升级到5.3.0后,添加了对不存在字段的校验:NoSuchPropertyException,能否主动关闭校验? #517

Closed liaipeng closed 1 year ago

liaipeng commented 1 year ago

DTO中的字段: image

取值: image

原来在5.2.6版本找不到字段是返回null,升级到5.3.0之后会报错: Caused by: com.googlecode.aviator.exception.NoSuchPropertyException: Property isRetry not found in xxx

看起来像是因为小布尔值,默认去除了前缀的is?麻烦帮忙看下

killme2008 commented 1 year ago

缺少 getter 方法?

liaipeng commented 1 year ago

缺少 getter 方法?

这是个小布尔值,没有get方法,只有isRetry方法。应该是这里出现问题,历史原因这个DTO的小布尔命名不太规范,前缀带了is(命名成了isRetry,按照规约应该是命名为retry,方法名是isRetry),可能因此违反了aviator的某种约束?导致在获取值的时候找不到字段。

我试了一下,把表达式替换成 #res.retry就可以取到值了,看起来了aviator在取值的时候,默认把前缀的is去掉了。

但是我们的组件已经提供出去给用户使用了,让每个用户都去改表达式的成本很高。我看changelog里,是5.2.7的版本中加了no such property的校验,请问这个校验能否通过指定入参或者全局设置去掉?

killme2008 commented 1 year ago

这个可以针对 boolean 类型做个兼容处理。我认领下。

killme2008 commented 1 year ago

@liaipeng 在最新主干代码 fix 了,你可以尝试自行打包测试下 https://github.com/killme2008/aviatorscript/commit/c22399df930c0d55c4ca858252f8bb7f65de2efc

killme2008 commented 1 year ago

Fixed in v5.4.0