gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:09:02 25 4
gpt4 key购买 nike

我在使用 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");
}
...

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

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

最佳答案

如果您希望您的客户端收到错误的 HTTP 状态,如 400 等,您应该在您的 Controller 中返回此类状态。抛出异常是不够的。你有几个选择;不要抛出异常或创建一个为您处理异常的@ControllerAdvice

伪代码:

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

或者继续抛出异常并像这样创建一个 Controller 建议。

@ControllerAdvice
public class GlobalControllerBehavior {

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

最重要的是,如果您不返回 4xx 或 5xx 之类的 HTTP 状态代码,您的 JavaScript 错误 block 将不会被执行。

关于java - Angular $http - spring - 抛出异常但http状态为200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34175137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com