使用@ExceptionHandler实现全局异常处理器

使用SpringMVC提供的@ControllerAdvice,@ExceptionHandler可以方便的实现全局异常处理器.

不仅方便,可以更细粒度的控制各种异常.

首先创建一个全局异常处理类:

/**
 * Created with IntelliJ IDEA.
 *
 * @author: ChuRuo Xu
 * 注解全局异常处理器
 */
@ControllerAdvice
public class AnnotationExceptionHandler {

    // 自定义异常
    @ExceptionHandler(CustomException.class)
    public ModelAndView customerExceptionHandler(CustomException customerException) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg", customerException.getMessage());
        modelAndView.setViewName("error");
        return modelAndView;
    }

    // 系统异常
    @ExceptionHandler(Exception.class)
    public ModelAndView Exception(Exception e) {
        //获取日志记录器,这个记录器将负责控制日志信息
        Logger logger = Logger.getLogger(AnnotationExceptionHandler.class.getName());
        //使用Logger对象的debug、info方法输出日志信息
        logger.info(e.getMessage());
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg", "服务器异常!请稍后再试!");
        modelAndView.setViewName("error");
        return modelAndView;
    }

}

自定义异常类继承RuntimeException重写方法即可,idea使用ctrl+o

之所以继承RuntimeException,忘记了....哈哈,大概是对于Spring来说比继承exception更好

/**
 * Created with IntelliJ IDEA.
 *
 * @author: ChuRuo Xu
 * 自定义异常处理器
 */
public class CustomException extends RuntimeException {

    public CustomException() {
        super();
    }

    public CustomException(String message) {
        super(message);
    }

    public CustomException(String message, Throwable cause) {
        super(message, cause);
    }

    public CustomException(Throwable cause) {
        super(cause);
    }

    protected CustomException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }

}

最重要的一步,在springmvc.xml配置文件中扫描注解包

<!-- 扫描controller注解,多个包使用[,]分割 -->
    <context:component-scan base-package="com.springmvc.exception"/>

这样就可以了,测试后无问题.附上其他代码:

<!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"/>
        <!-- 前缀 -->
        <property name="prefix" value="/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
log4j.properties:

# 定义 DEBUG 优先级, R 为日志输出目的的
log4j.rootLogger= DEBUG, R

# 设置日志输出类型 , 为文件类型
log4j.appender.R= org.apache.log4j.FileAppender

# 设置日志文件的位置
log4j.appender.R.file=F:\\logRecord.log

# 每次在文件尾写入新的日志信息
log4j.appender.R.Append= true 

# 日志输出信息格式类型
log4j.appender.R.layout= org.apache.log4j.PatternLayout

# 日志输出信息格式为 换行、日期、优先级、 [ 全类名 ] 、日志信息、换行
log4j.appender.R.layout.ConversionPattern= %n%d%p [%l] %m%n



发布了19 篇原创文章 · 获赞 5 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/a243293719/article/details/78378974
今日推荐