使用spring Web flow记录异常

时间:2014-07-24 21:54:57

标签: spring logging spring-webflow

HY,

我是Spring Web Flow的新手。我试图找出在流文件中记录异常的最简单方法。有一个名为exception-handler的标签,但我找不到有关如何记录异常的任何文档。我知道第三方库的例外被记录(springhibernate)但我想处理异常并创建我自己的日志条目。

1 个答案:

答案 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了解详情。