我想实现一个@ExceptionHandler可以防止所有未捕获的异常到达客户端。像这样的东西...
@ControllerAdvice
public class ExceptionHandlingControllerAdvice {
private static final Logger logger = getLogger(ExceptionHandlingControllerAdvice.class);
@ExceptionHandler(Exception.class)
@ResponseStatus(value = INTERNAL_SERVER_ERROR)
public void handleAnyUncaughtException(Exception e) {
logger.error("This uncaught exception is being blocked from reaching the client.", e);
}
}
Run Code Online (Sandbox Code Playgroud)
但这妨碍了开箱即用的异常处理DefaultHandlerExceptionResolver,例如,在@RequestBody检查失败的验证时抛出 4xx 错误@Valid。@ExceptionHandler在DHER可以尝试返回 4xx之前,似乎优先并返回 500 。
有没有办法阻止未捕获的异常到达客户端,但仍然让客户端DefaultHandlerExceptionResolver完成它的工作?
我找到了解决方案。我正在编写一个@ExceptionHandler显式处理所有标准 Spring MVC 异常的代码,检查了列表的手册,并遍历了ResponseEntityExceptionHandler基类。
扩展在基类@ControllerAdvice增加了一个@ExceptionHandler与关键区别标准异常,你就不必维护该列表应这些异常变化。在@ControllerAdvice现在看起来是这样。
@ControllerAdvice
public class ExceptionHandlingControllerAdvice extends ResponseEntityExceptionHandler {
private static final Logger logger = getLogger(ExceptionHandlingControllerAdvice.class);
@ExceptionHandler(Exception.class)
@ResponseStatus(value = INTERNAL_SERVER_ERROR)
public void handleAnyUncaughtException(Exception e) {
logger.error("This uncaught exception is being blocked from reaching the client.", e);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |