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;
}
}