SpringBoot注解@ControllAdvice知多少
为了方便对异常的统一管理 , spring mvc提供了ControllerAdvice注解对异常进行统一的处理 , 拿到这些异常信息后 , 可以做一些处理 , 比如提供一个统一的web界面查看异常信息 , 或者普通到异常信息后 , 发送短信、邮件形式通知到相关人员 , 可以帮助开发人员快速发现并定位问题 , 减少以往通过查看线上日志文件排查问繁琐锁耗时的所耗费的时间 。 下面我跟大家介绍具体步骤 。
配置spring 版本:
spring-servlet.xml , 注意必须开启注解 , 即xml要有
异常统一处理类package org.as.asjee.core.exception;import java.sql.SQLException;import javax.servlet.http.HttpServletRequest;import org.as.asjee.core.log.AsJEELogger;import org.as.asjee.core.log.AsJEELoggerFactory;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;/** * 捕获异常统一处理 * @description TODO * @author chen.gs * @create date 2016年4月28日 * @modified by* @modify date * @version v1.0 */@ControllerAdvicepublic class GlobalExceptionHandler {private final static AsJEELogger LOG = AsJEELoggerFactory.getLogger(GlobalExceptionHandler.class);private final static String EXPTION_MSG_KEY = "message";@ExceptionHandler(BusinessException.class)@ResponseBodypublic void handleBizExp(HttpServletRequest request, Exception ex){LOG.info("Business exception handler" + ex.getMessage() );request.getSession(true).setAttribute(EXPTION_MSG_KEY, ex.getMessage());}@ExceptionHandler(SQLException.class)public ModelAndView handSql(Exception ex){LOG.info("SQL Exception " + ex.getMessage());ModelAndView mv = new ModelAndView();mv.addObject("message", ex.getMessage());mv.setViewName("sql_error");return mv;}}自定义异常类BussinessException.javapackage org.as.asjee.core.exception;/** * 业务异常 * @description TODO * @author chen.gs * @create date 2016年4月28日 * @modified by* @modify date * @version v1.0 */public class BusinessException extends Exception{private static final long serialVersionUID = 1L;//业务类型private String bizType;//业务代码private int bizCode;//错误信息private String message;public BusinessException(String bizType, int bizCode, String message){super(message);this.bizType = bizType;this.bizCode = bizCode;this.message = message;}public BusinessException(String message){super(message);this.bizType = "";this.bizCode = -1;this.message = message;}public BusinessException(String bizType, String message){super(message);this.bizType = bizType;this.bizCode = -1;this.message = message;}public BusinessException(int bizCode, String message){super(message);this.bizType = "";this.bizCode = bizCode;this.message = message;}public String getBizType() {return bizType;}public void setBizType(String bizType) {this.bizType = bizType;}public int getBizCode() {return bizCode;}public void setBizCode(int bizCode) {this.bizCode = bizCode;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}controller【SpringBoot注解@ControllAdvice知多少】package org.as.asjee.core.security.web;import java.sql.SQLException;import javax.annotation.Resource;import org.as.asjee.core.exception.BusinessException;import org.as.asjee.core.security.model.User;import org.as.asjee.core.security.service.UserService;import org.as.asjee.core.service.ServiceFacade;import org.as.asjee.core.web.AbstractController;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/security/user")public class UserControllerextends AbstractController
- SpringBoot+MyBatis+MySQL读写分离实现
- SpringBoot构造流程源码分析:Web应用类型推断
- 搭建私有Sentry日志收集系统并集成到springboot
- SpringBoot扫描不到组件?给你提供几种方案
- SpringBoot自定义错误页面
- SpringBoot实现反向代理
- SpringBoot内置源码解析WebServer初始化过程
- SpringBoot外化配置源码解析:命令参数获取文件加载
- SpringBoot外化配置源码解析:外化配置简介、参数处理
- SpringBoot外化配置源码解析:Profile处理实现
