将要学习的内容

1.spring boot 第二节


自定义异常

目前存在问题:

需要一个自定义的异常

自定义异常1.code2.message,还是直接用枚举类型?建议直接使用枚举类型(提供一个构造方法将枚举类型传入进来,枚举类型里面获取枚举类型的状态码,将状态码复制给自定义异常的属性。。。。)

剩下的人去new的自定义异常的时候,将枚举类传入进来,然后去获取枚举类型响应的code。


1.需要定义一个实例用来继承Exception

这个类里面含有错误码,错误信息,并且有一个构造方法

(个人感觉,需要使用aop的方式,来统一扫描,如果出现异常就直接抛出,对于别人的代码没有侵入性)

2.在controller方法里面抛出自己定义的异常类

controller层异常处理

  1.控制层验证异常。 2.业务层使用断言的异常   3.不可知异常   需要有日志记录


@ControllerAdvice
 2 public class ExceptionsHandler {
 3 
 4     @ExceptionHandler(CustomGenericException.class)//可以直接写@ExceptionHandler,不指明异常类,会自动映射
 5     public ModelAndView customGenericExceptionHnadler(CustomGenericException exception){ //还可以声明接收其他任意参数
 6         ModelAndView modelAndView = new ModelAndView("generic_error");
 7         modelAndView.addObject("errCode",exception.getErrCode());
 8         modelAndView.addObject("errMsg",exception.getErrMsg());
 9         return modelAndView;
10     }
11 
12     @ExceptionHandler(Exception.class)//可以直接写@EceptionHandler,IOExeption继承于Exception
13     public ModelAndView allExceptionHandler(Exception exception){
14         ModelAndView modelAndView = new ModelAndView("generic_error");
15         modelAndView.addObject("errMsg", "this is Exception.class");
16         return modelAndView;
17     }
18 }
service层的异常处理
java.lang;
public  class IllegalArgumentException extends RuntimeException

controller层异常处理

/**
 * Created by kinginblue on 2017/4/10.
 * @ControllerAdvice + @ExceptionHandler 实现全局的 Controller 层的异常处理
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 处理所有不可知的异常
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    AppResponse handleException(Exception e){
        LOGGER.error(e.getMessage(), e);

        AppResponse response = new AppResponse();
        response.setFail("操作失败!");
        return response;
    }

    /**
     * 处理所有业务异常
     * @param e
     * @return
     */
    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    AppResponse handleBusinessException(BusinessException e){
        LOGGER.error(e.getMessage(), e);

        AppResponse response = new AppResponse();
        response.setFail(e.getMessage());
        return response;
    }

    /**
     * 处理所有接口数据验证异常
     * @param e
     * @return
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    AppResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
        LOGGER.error(e.getMessage(), e);

        AppResponse response = new AppResponse();
        response.setFail(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());
        return response;
    }
}





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

猜你喜欢

转载自blog.csdn.net/lizhen1114/article/details/80576359
今日推荐