5. 全局异常捕捉

在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢?

新建一个类GlobalDefaultExceptionHandler,

在class注解上@ControllerAdvice,

在方法上注解上@ExceptionHandler(value= Exception.class),具体代码如下:

com.kfit.base.exception.GlobalDefaultExceptionHandler

package com.kfit.base.exception;

importjavax.servlet.http.HttpServletRequest;

importorg.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice

publicclass GlobalDefaultExceptionHandler {

       @ExceptionHandler(value =Exception.class)

       publicvoiddefaultErrorHandler(HttpServletRequest req, Exception e) {

//      // If the exception is annotated [email protected] rethrow it and let

//      // the framework handle it - like theOrderNotFoundException example

//      // at the start of this post.

//      // AnnotationUtils is a Spring Frameworkutility class.

//      if (AnnotationUtils.findAnnotation(e.getClass(),ResponseStatus.class) != null)

//          throw e;

//

//      // Otherwise setup and send the user to adefault error-view.

//      ModelAndView mav = newModelAndView();

//      mav.addObject("exception", e);

//      mav.addObject("url",req.getRequestURL());

//      mav.setViewName(DEFAULT_ERROR_VIEW);

//      return mav;

         //打印异常信息:

        e.printStackTrace();

        System.out.println("GlobalDefaultExceptionHandler.defaultErrorHandler()");

        /*

         * 返回json数据或者String数据:

         * 那么需要在方法上加上注解:@ResponseBody

         * 添加return即可。

         */

        /*

         * 返回视图:

         * 定义一个ModelAndView即可,

         * 然后return;

         * 定义视图文件(比如:error.html,error.ftl,error.jsp);

         *

         */

 }

}

com.kfit.test.web.DemoController 加入方法:

@RequestMapping("/zeroException")

       publicintzeroException(){

              return 100/0;

       }

访问:http://127.0.0.1:8080/zeroException这个方法肯定是抛出异常的,那么在控制台就可以看到我们全局捕捉的异常信息了。

更精确的异常捕捉:

@Controller
public class ExceptionHandlingController {
  // @RequestHandler methods
  // Exception handling methods
  // Convert a predefined exception to an HTTP Status code
  @ResponseStatus(value=HttpStatus.CONFLICT, reason="Data integrity violation")  // 409
  @ExceptionHandler(DataIntegrityViolationException.class)
  public void conflict() {
    // Nothing to do
  }

  // Specify the name of a specific view that will be used to display the error:
  @ExceptionHandler({SQLException.class,DataAccessException.class})
  public String databaseError() {
    // Nothing to do.  Returns the logical view name of an error page, passed to
    // the view-resolver(s) in usual way.
    // Note that the exception is _not_ available to this view (it is not added to
    // the model) but see "Extending ExceptionHandlerExceptionResolver" below.
    return "databaseError";
  }

  // Total control - setup a model and return the view name yourself. Or consider
  // subclassing ExceptionHandlerExceptionResolver (see below).
  @ExceptionHandler(Exception.class)
  public ModelAndView handleError(HttpServletRequest req, Exception exception) {
    logger.error("Request: " + req.getRequestURL() + " raised " + exception);

    ModelAndView mav = new ModelAndView();
    mav.addObject("exception", exception);
    mav.addObject("url", req.getRequestURL());
    mav.setViewName("error");
    return mav;
  }
}
 

原文地址:https://www.cnblogs.com/blackCatFish/p/9886308.html

时间: 2024-11-02 12:50:11

5. 全局异常捕捉的相关文章

Android全局异常捕捉

// 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.Thread.UncaughtExceptionHandler;

为aps.net core项目加上全局异常捕捉和记录

在asp.net core中的方案在这里:http://stackoverflow.com/questions/30385246/can-asp-net-5-app-useerrorhandler-access-error-details 在.net core中的方案在这里:http://www.cnblogs.com/maxzhang1985/p/5872968.html

windows C++ 全局异常捕捉函数

windows 核心编程中讲过 SEH 结构化异常处理 ::SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* exp) { return EXCEPTION_EXECUTE_HANDLER; }

Android应用源码之捕获全局异常

Android应用源码之捕获全局异常 本项目就是一个简单的全局异常捕捉例子,捕捉到异常以后可以把异常信息写入文件以供后来分析或者用友好的方式进行提示后再退出程序. 下载地址:http://www.devstore.cn/code/info/630.html

【第一篇笔记】C# 全局容错,全局异常

网上找到两个方式,一个简单的只是做个记录,另一个能像QQ一样提交到后台. 方法一: static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { try { //设置应用程序处理异常方式:ThreadException处理 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.C

全局异常跟只能开启一次程序,打开第二次将把该程序显示最前

static class SingleInstanceApplication { [DllImport("kernel32.dll", SetLastError = true)] public static extern IntPtr CreateMutex(IntPtr Attr, bool Own, string Name); [DllImport("kernel32.dll", SetLastError = true)] public static exter

Spring 框架——利用HandlerExceptionResolver实现全局异常捕获

https://blog.csdn.net/qq_22172133/article/details/82147630 微信一.需求描述        因为在项目中,我们不可否认的会出现异常,而且这些异常并没有进行捕获.经常出现的bug如空指针异常等等.在之前的项目中,如果我们没有进行任何配置,那么容器会自动打印错误的信息,如果tomcat的404页面,400页面等等.如果我们在web.xml中进行如下配置,就会拦截错误,然后跳转到指定的错误页面. <error-page>    <err

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常.本文作为学习笔记,记录了使用Global.asax文件的Application_Error事件处理和捕获全局异常的详细步骤. 文章演示项目是使用vs2013编译器编写的,下载地址:GlobalExceptionHandle-By-Application_Error.zip. 在VS2013中新建一个MVC项目,这里要先关闭自定义错误,将Web.config配置文件中cus

在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常

毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如何捕捉全局的异常.基本上在winform或web中捕获全局异常的思路都是一样的,在全局的应用程序对象中添加异常捕获的代码,并写入日志文件中. 一.在Winform程序中捕获全局异常 在winfrom中我们需要了解Application对象中的两个事件 ①Application.ThreadExcep