2015-12-09 3 views
3

У меня появилось поведение, которое я не понимаю в приложении с использованием Spring и углового. Исключением является бросок в HTTP-запросе. Я сделал тест ниже.

@RequestMapping(value = "/contract/upload/excel", method = RequestMethod.POST) 
public String uploadContractExcel(HttpServletRequest request, ModelMap model) { 
if(true) { 
throw new RuntimeException("my code is broken"); 
} 
... 

В JavaScript в функции $ HTTP вместо того чтобы идти в блок ошибок, он возвращается к блоку успеха с кодом состояния 200 - OK. Поэтому я не могу справиться с каким-либо исключением.

$http({ 
method : 'POST', 
url : resolveAjax, 
data : formData 
}).then(
function successCallback(response) { 
var data = response.data; 
if (data.upload_error === "true") { 
    $scope.busy = false; 
    $scope.upload_error_message = data.upload_error_message; 
} else { 
    $scope.contractSummary = angular 
      .fromJson(data.reference_excel_resolved); 
    $scope.busy = false; 
     $scope.tabindex = $scope.tabindex * 1 + 1; 
    } 
}, 
function errorCallback(response) { 
    $scope.upload_error_message = 'Oups something went wrong'; 
}); 

У кого-нибудь есть представление о том, что происходит? Спасибо

ответ

5

Если вы хотите, чтобы ваш клиент получил плохой статус HTTP, такой как 400 и т. Д., Вы должны вернуть такой статус в свой контроллер. Выбросить исключение не хватит. У вас есть несколько вариантов; не генерируйте исключение или создайте @ControllerAdvice, который обрабатывает исключения для вас.

ПСЕВДОКОД:

@RequestMapping(value = "/url", method = POST) 
public ResponseEntity postYourObject(@RequestBody YourObject object) { 
    if (true) { 
     return new ResponseEntity<>("Something happened", HttpStatus.BAD_REQUEST); 
    } 
} 

Или держать бросать исключение и создать совет контроллера, как это.

@ControllerAdvice 
public class GlobalControllerBehavior { 

    @ExceptionHandler 
    public ResponseEntity handleException(YourException e) { 
     return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); 
    } 
} 

Нижняя линия, если вы не возвращают код статуса HTTP, как 4xx или 5xx вашей ошибки блока JavaScript не будет та или иная строчка.

+0

ок большого спасибо за ваши объяснения. Я думал, что исключение вернет по умолчанию код, отличный от 200 в контроллере. Я проверю это. –

+0

Добро пожаловать, попробуйте и дайте мне знать. –

0

Я знаю его давно, но даже если есть исключение на стороне сервера, то в конечном счете, форма ответа, клиент получает, и, следовательно, статус HTTP 200.

Смежные вопросы