HY,
我是Spring Web Flow的新手。我试图找出在流文件中记录异常的最简单方法。有一个名为exception-handler
的标签,但我找不到有关如何记录异常的任何文档。我知道第三方库的例外被记录(spring
,hibernate
)但我想处理异常并创建我自己的日志条目。
答案 0 :(得分:0)
基于控制器的异常处理
使用@ExceptionHandler
@Controller
public class ExceptionHandlingController {
@ExceptionHandler(Exception.class)
public ModelAndView getExceptionPage(Exception e, HttpServletRequest request) {
// Catches all exception
// Do anything with Exception object here
if (isAjax(request)) {
// If exception comes for Ajax requests
ModelAndView model = new ModelAndView("forward:/app/webExceptionHandler/ajaxErrorRedirectPage");
model.addObject("exception", exception);
model.addObject("url", req.getRequestURL());
model.setViewName("error");
return model;
} else {
// If exception comes for all non Ajax requests
ModelAndView model = new ModelAndView("forward:/app/webExceptionHandler/nonAjaxErrorRedirectPage");
model.addObject("exception", exception);
model.addObject("url", req.getRequestURL());
model.setViewName("error");
return model;
}
}
@ExceptionHandler({SQLException.class,DataAccessException.class})
public String databaseError() {
// Catches specific exception SQLException
return "databaseError";
}
private static boolean isAjax(HttpServletRequest request) {
return "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
}
}
全局异常处理
使用@ControllerAdvice
类
控制器建议允许您使用完全相同的异常处理技术,但将它们应用于整个应用程序,而不仅仅是单个控制器。您可以将它们视为注释驱动的拦截器。
任何使用@ControllerAdvice
注释的类都将成为控制器建议,并支持三种类型的方法:
@ControllerAdvice
class GlobalControllerExceptionHandler {
@ExceptionHandler(DataIntegrityViolationException.class)
public void handleConflict() {
// Nothing to do
}
}
请refer了解详情。