spring项目中异常设计

我们用到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. 我们是不是需要统一的异常显示信息,是不是需要考虑国际化。

那么接下来我们就看看怎么实现吧。

明天再写

猜你喜欢

转载自zhanshi258.iteye.com/blog/2225972