gpt4 book ai didi

java - @ControllerAdvice 类中的信息传递到哪里

转载 作者:行者123 更新时间:2023-12-02 12:05:30 24 4
gpt4 key购买 nike

我一直在关注一些有关使用 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");在任何 Controller 中,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回应。

关于java - @ControllerAdvice 类中的信息传递到哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46935624/

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