我一直在关注使用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();
}
答案 0 :(得分:1)
你在这里做的几乎就是Spring为你做的事情,你不必手动捕捉每一个例外。
E.g。如果您在任何控制器中执行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
响应。