我制作了一个全局异常处理程序来捕获包装的业务异常。
我想为每个包装的异常返回不同的状态代码和自定义响应。

所以我做了一个全局异常处理程序:

@ControllerAdvice
public class ExportWordProfileExceptionControllerAdvice {

    @ExceptionHandler({ExportWordProfileException.class})
    public ResponseEntity<ApiError> exportWordProfileException(
            ExportWordProfileException ex) {

        if (ex.getCause() instanceof ProfileNotFoundException) {
            var apiError = new ApiError(HttpStatus.NOT_FOUND, ex.getCause().getMessage());
            return new ResponseEntity<>(apiError, HttpStatus.NOT_FOUND);
        }

        var apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage());
        return new ResponseEntity<>(apiError, HttpStatus.INTERNAL_SERVER_ERROR);
    }

}



当我测试抛出ExportWordProfileException的控制器时,我
总是得到200状态代码。但是我有正确的错误信息:

<200,{"data":{"status":"NOT_FOUND","message":"Le profile avec l'id '8e6d45ca-d08f-48b8-8ed0-ea7ea067cf5e' n'existe pas."}} .....


我该如何解决这个问题?
谢谢阅读。

..............
编辑
.............

这个问题可能来自我使用RestTemplate进行测试的方式吗?
我与Postman进行了测试,结果相同

最佳答案

我认为您的代码没有任何问题。造成此问题的可能原因是因为另一个异常处理程序正在干扰ExportWordProfileExceptionControllerAdvice。

09-15 16:41