我们用到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. 我们是不是需要统一的异常显示信息,是不是需要考虑国际化。
那么接下来我们就看看怎么实现吧。
明天再写