java.lang.NumberFormatException:对于输入字符串:""在spring-beans4.3.6

时间:2017-02-06 08:27:39

标签: java spring spring-boot annotations hibernate-validator

从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。

0 个答案:

没有答案