gpt4 book ai didi

java - @ExceptionHandler 本地与全局

转载 作者:行者123 更新时间:2023-12-01 12:27:13 24 4
gpt4 key购买 nike

我将在我的 Web 应用程序上引入全局处理程序:

@ControllerAdvice
public class GlobalControllerExceptionHandler {

@ExceptionHandler(CustomRuntimeException.class)
public @ResponseBody ImmutableMap<?, String> handleNullResponseException(CustomRuntimeException e) {
return ImmutableMap.of(e.getClass(), e.getMessage());
}
}

但问题是遗留代码包含一些带有本地处理程序的 Controller ,如下所示:

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(Exception.class)
public @ResponseBody ExceptionDetails handleException(Exception e) {
return handleException(e);
}

当 Controller 抛出CustomRuntimeException时,它由本地异常处理,而不是全局处理。为了修复它,我可以向每个 Controller 添加类似于全局的本地处理程序。但对我来说,这不是一件好事。

问题:是否可以将处理自定义异常重定向到全局处理程序?

最佳答案

您需要将更具体的异常放入本地ExceptionHandler中,将更一般的异常放入全局ExceptionHandler中。类似于Java异常处理。如果将“常规”放在“本地”中,则所有异常都将在那里结束,因为它是最接近的异常并接受任何异常。

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(IOException.class)
public @ResponseBody ExceptionDetails handleIOException(IOException e) {
return handleException(e);
}

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(NullPointerException.class)
public @ResponseBody ExceptionDetails handleNPException(NullPointerException e) {
return handleException(e);
}

关于java - @ExceptionHandler 本地与全局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26231241/

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