信息在@ControllerAdvice类中传递到哪里



我一直在关注一些关于使用Spring框架进行错误处理的教程。我的handleNullPointer 方法确实捕获了空指针异常。但是,我想知道该方法在此之后返回到何处,因为我想在前端(网页)上显示错误的一些信息。这是我的 GlobalControllerExceptionHandler 和 handleNullPointer 方法(以及包括错误处理的其他实现尝试):

@ControllerAdvice
public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHandler {
    /* A different attempt at error handling
    @ExceptionHandler({Exception.class})
    public ResponseEntity<Object> handleAll (Exception exception, WebRequest request) {
        ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, exception.getLocalizedMessage(), "error occured");
        return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
    }*/
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(NullPointerException.class)
    @ResponseBody ErrorInfo
    handleNullPointer(HttpServletRequest req, Exception exception){
        System.out.println("This worked.");
        return new ErrorInfo(req.getRequestURL().toString(), exception);
    }
}

的想法是,我必须以某种方式在前端的javascript中获取此信息才能显示信息,但是我是javascrip的新手。所以,我仍然不确定这是否是我应该使用的解决方案。

作为参考,这是我的 ErrorInfo 类:

public class ErrorInfo {
    public final String url;
    public final String exceptionMessage;
    public ErrorInfo(String url, Exception exception){
        this.url = url;
        this.exceptionMessage = exception.getLocalizedMessage();
    }

你在这里所做的几乎就是 Spring 为你做的事情,你不必手动捕获每一个异常。

例如,如果您在任何控制器中执行throw new NullPointerException("Something went wrong");,Spring 将返回一个带有包含错误消息的响应正文的500

您没有提及如何发送请求,但如果您使用fetch则读取响应的方式如下所示:

fetch("/path/to/resource").then(function(response) {
    return response.json();
}).then(function(json) {
    alert(json.error_description);
});

这将提醒Something went wrong;

我能想到你实际上想要以你在问题中提出的方式捕获异常的唯一原因是,如果你想在返回响应之前做其他事情,比如记录有关异常的信息。但在这种情况下,您可以捕获异常,执行日志记录,然后重新抛出它,并信任 Spring 将此信息转换为适当的500响应。

相关内容

  • 没有找到相关文章

最新更新