我们用到spring4 来处理异常,每当项目发生异常时,它就会调用相应的方法。
spring异常处理类:
@Controller
@ControllerAdvice
public class ControllerExceptionHandler{
private static final Log LOGGER = LogFactory.getLog(ControllerExceptionHandler.class);
@ExceptionHandler(Throwable.class)
@ResponseBody
public ResponseEntity<Message> handleThrowable(Throwable ex) {
System.out.println("#############异常111111111##############");
LOGGER.error("", ex);
Message message = new Message();
return new ResponseEntity<Message>(message, null, HttpStatus.OK);
}
@ExceptionHandler(IllegalArgumentException.class)
@ResponseBody
public ResponseEntity<Message> handleIllegalArgumentException(IllegalArgumentException ex) {
System.out.println("#############异常2222222222##############");
LOGGER.error("", ex);
Message message = new Message();
return new ResponseEntity<Message>(message, null, HttpStatus.OK);
}
@ExceptionHandler(BaseLogicException.class)
@ResponseBody
public ResponseEntity<Message> handleBaseLogicException(BaseLogicException ex) {
System.out.println("#############异常333333333333333333333333333333##############");
LOGGER.error("", ex);
Message message = new Message();
return new ResponseEntity<Message>(message, null, HttpStatus.OK);
}
}
注意里面的注解都不能少,而且使用springmvc扫描这个类。不要再使用spring重复扫描。
<context:component-scan base-package="com.qing.web.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>
其实异常处理就是这么简单,每次项目中出现异常时,就会跳到上面相应的方法中。
我们可以在上面的方法中集中处理,可以跳到某一页面。
我们应该注意到了第三个方法,会拦截BaseLogicException异常。 这个是我们自己定义的异常。
既然我们想自定义异常,那就要规范一点,我们是不是需要一个异常码,比如404,500. 我们是不是需要统一的异常显示信息,是不是需要考虑国际化。
那么接下来我们就看看怎么实现吧。
明天再写