@ControllerAdvice
注解可以用于处理多种类型的异常,以下是一些常见的情况:
一、处理通用异常
Exception
:可以捕获所有未被特定处理的异常,作为兜底的全局异常处理。例如:@ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseBody public Map<String, Object> handleException(Exception e) { Map<String, Object> errorResponse = new HashMap<>(); errorResponse.put("message", "An unexpected error occurred."); errorResponse.put("error", e.getMessage()); return errorResponse; }
二、处理特定技术相关异常
-
NullPointerException
:空指针异常。当程序中出现对空对象的引用时可能抛出。 -
IllegalArgumentException
:非法参数异常。当传入的参数不合法时可能抛出。 -
NumberFormatException
:数字格式异常。当尝试将一个非数字字符串转换为数字类型时可能抛出。针对这些特定异常可以进行专门的处理,提供更有针对性的错误信息:
@ExceptionHandler(NullPointerException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody public Map<String, Object> handleNullPointerException(NullPointerException e) { Map<String, Object> errorResponse = new HashMap<>(); errorResponse.put("message", "Null pointer exception occurred. Please check your input."); return errorResponse; }
三、处理业务相关异常
可以自定义业务异常类,并使用@ControllerAdvice
来处理这些特定的业务异常。例如:
-
定义业务异常类:
public class BusinessException extends RuntimeException { public BusinessException(String message) { super(message); } }
-
处理业务异常:
@ExceptionHandler(BusinessException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody public Map<String, Object> handleBusinessException(BusinessException e) { Map<String, Object> errorResponse = new HashMap<>(); errorResponse.put("message", e.getMessage()); return errorResponse; }
通过以上方式,可以根据不同类型的异常提供定制化的错误响应,提高应用的健壮性和用户体验。