当前位置:  开发笔记 > 编程语言 > 正文

Angular $ http - spring - 抛出异常但http状态为200

如何解决《Angular$http-spring-抛出异常但http状态为200》经验,为你挑选了1个好方法。

我在使用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的成功块 - 确定.所以我无法处理任何异常.

$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';
});

有谁知道会发生什么?谢谢



1> Niels Masdor..:

如果您希望客户端收到错误的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);
    }
}

最重要的是,如果您不返回像4xx或5xx这样的HTTP状态代码,那么您的JavaScript错误块将不会被激活.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有