gpt4 book ai didi

java - 自定义异常未使用@ExceptionHandler 注释方法处理

转载 作者:行者123 更新时间:2023-11-30 10:46:04 26 4
gpt4 key购买 nike

我有一个定义为的自定义异常类

public class CustomAuthenticationException extends RuntimeException{

}

我从 Controller 方法中抛出这个异常,如下所示

    @RequestMapping(value="/tasks", method=RequestMethod.GET)
public String loadTasks(HttpServletRequest request){

try
{
if (!isAuthenticatedRequest(request))
{

throw new CustomAuthenticationException();
}

}
catch(Exception ex)
{
ex.printStackTrace();
}

return "tasks/tasks";
}

为了从该 Controller 的作用域中捕获此异常,我定义了一个带有 @ExceptionHandler 注释的方法,如下所示

    @ExceptionHandler(CustomAuthenticationException.class)
public void handleCustomException(CustomAuthenticationException ex){
//method is not getting invoked
}

当我发起 GET 请求并期望异常由上述方法处理时,我在控制台中只得到错误堆栈跟踪。永远不会调用异常处理程序方法。

但是,对于其他定义的异常,如 MethodArgumentNotValidException,处理程序方法被正确调用。例如,我得到了以下异常处理程序:

    @ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ErrorResponseHolder handleFieldValidationError(MethodArgumentNotValidException ex, HttpServletResponse response){
//method got invoked. do something with the exception
}

如何解决自定义异常的问题?

最佳答案

异常处理不当,在 loadTasks 方法中您抛出异常并捕获异常,因此它不会传播。

如果你想处理未处理的异常,例如通用异常 (Exception.class),你需要编写一个方法来处理所有这些异常的通用异常处理类。

@ExceptionHandler(Exception.class)
public void handleUnhandledException(Exception ex){
// handle the exception here
}

一旦抛出异常,永远不要在同一方法中捕获异常,而是在发送正确响应的地方捕获异常。

关于java - 自定义异常未使用@ExceptionHandler 注释方法处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762061/

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