如何捕获Spring MVC中的Integer溢出错误?

时间:2011-05-20 06:32:11

标签: java validation integer-overflow

我正在使用Spring MVC 3.0.5。 Spring愉快地忽略了映射到Integer的字段的Integer溢出。如何报告正确的错误?

2 个答案:

答案 0 :(得分:4)

这不是一个Spring问题,它是一个普遍的Java问题。 Java没有像C这样的溢出问题,但它包含整数。

@Test
public void demoIntegerWrapp(){
  int value = Integer.MAX_VALUE;
  value += 1;
  assertEquals(Integer.MIN_VALUE, value);
}

所以最好的想法是你可以用long来计算并检查结果是否在整数范围内,否则抛出异常。

public int overflowSaveAdd(int summand1, int summand2) {
  long sum = ((long) summand1) + ((long) summand2);
  if (sum < Integer.MIN_VALUE ) || (sum > Integer.MAX_VALUE) {
     throw new RuntimeException(sum + " is too big for integer");
  } else {
     return (int) sum;
  }
}

答案 1 :(得分:1)

有些Java库提供安全的算术运算,可以检查整数溢出/下溢。例如,Guava的IntMath.checkedAdd(int a, int b)会返回ab的总和,前提是它不会溢出,如果ArithmeticException溢出签名a + b,则会抛出int算术。