我对使用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';
});
有人知道会发生什么吗? 感谢
答案 0 :(得分: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);
}
}
最重要的是,如果您没有返回像4xx或5xx这样的HTTP状态代码,那么您的JavaScript错误阻止将不会被解决。
答案 1 :(得分:0)
我知道它很长,但即使服务器端存在异常,它最终也是客户端收到的响应形式,因此也就是HTTP状态200.