从spring-boot 1.4.2.RELEASE升级到1.5.1.RELEASE(随新的spring-beans4.3.6.Release一起提供)后,我的测试开始失败并出现以下错误:
java.lang.NumberFormatException:对于输入字符串:""
在我的代码中,我有自定义注释(骑在hibrenate-validator5.4.0.Final上),它是为ElementType.TYPE_USE和ElementType.TYPE_PARAMETER定义的,以便能够迭代集合。
Set<@ElementSize(min = MIN_LENGTH, max = MAX_ID_LENGTH) String> ids
我的测试只是发送一个内部为空值的集合,以便在范围验证时失败:
Set<String> ids = new HashSet<>();
ids.add("");
在升级之前,我曾经获得MethodArgumentTypeMismatchException并分析异常但现在我因上述错误而失败。
我已经在Spring-beans代码中进行了一些挖掘,我在AbstractNestablePropertyAccessor.java
else if (value instanceof Set) {
// Apply index to Iterator in case of a Set.
Set<Object> set = (Set<Object>) value;
int index = **Integer.parseInt(key);**
if (index < 0 || index >= set.size()) {
throw new InvalidPropertyException(getRootClass(),
this.nestedPath + propertyName,
"Cannot get element with index " + index + "
from Set of size " + set.size() + ", accessed
using property path '" + propertyName + "'");
}
调试代码显示&#34; key&#34;持有空值&#34;&#34;从集合 通过尝试将其解析为Integer,它失败了。
这是春天的错误还是我需要修改代码的改进?
临时解决方案:
经过一些调查后,似乎我们使用较低版本的hibernate-validator到5.2.4.Final都正常工作,我们可以将spring-boot升级到1.5.1。