Как отловить ошибку переполнения Integer в Spring MVC? - PullRequest
3 голосов
/ 20 мая 2011

Я использую Spring MVC 3.0.5. Spring счастливо игнорирует переполнение Integer для поля, которое сопоставлено с Integer. Как я могу сообщить об этой ошибке?

Ответы [ 2 ]

4 голосов
/ 20 мая 2011

Это не проблема Spring, это общая проблема Java.У Java нет проблемы переполнения, как у C, но она обволакивает целое число.

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

Поэтому лучшее, что вы можете сделать, это использовать long для вычисления и проверить, находится ли результат в диапазоне от integer, иначе - throwисключение.

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 голос
/ 03 декабря 2012

Существуют библиотеки Java, которые обеспечивают безопасные арифметические операции, которые проверяют целочисленное переполнение / переполнение. Например, IntMath.checkedAdd (int a, int b) Guava возвращает сумму a и b, если она не переполняется, и выдает ArithmeticException, если a + b переполняется в подписанном int арифметика.

...