【问题标题】:Angular $http - spring - throws Exception but http status 200Angular $http - spring - 抛出异常但 http 状态 200
【发布时间】:2015-12-09 09:29:45
【问题描述】:

我在使用 Spring 和 Angular 的应用程序中遇到了我不理解的行为。 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");
}
...

在 $http 函数中的 JavaScript 中,它没有进入错误块,而是返回成功块,状态码为 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';
});

有人知道会发生什么吗? 谢谢

【问题讨论】:

    标签: java angularjs spring


    【解决方案1】:

    如果您希望您的客户端接收到错误的 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 错误块将不会被执行。

    【讨论】:

    • 好的,非常感谢您的解释。我认为默认情况下异常会在控制器中返回与 200 不同的代码。我会测试一下。
    【解决方案2】:

    我知道它已经很久了,但是即使服务器端出现异常,它最终也是客户端收到的一种响应形式,因此 HTTP 状态为 200。

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2017-06-25
      • 2014-01-18
      • 2023-03-24
      • 2017-10-11
      • 2014-08-21
      相关资源
      最近更新 更多