Spring统一异常处理之@ControllerAdvice 无法使用问题

最近项目使用@ControllerAdvice 进行配置全局的异常处理,但出现了@ControllerAdvice配置的类无法起作用。下面是我的异常处理类

/**
 * 
 */
package com.vkl.hblw.common.exception;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

import com.vkl.hblw.common.constant.SystemInfo;
import com.vkl.hblw.common.exception.bean.ServiceException;
import com.vkl.hblw.service.exception.ExceptionService;

/**
 * @author xcc
 * 统一异常处理类,所有的异常处理均在此类中处理。
 */
@ControllerAdvice
public class GlobalExceptionHandler {

	private static final Logger log = Logger.getLogger(GlobalExceptionHandler.class);
	@Resource
	private ExceptionService exceptionService;
	
	public ModelAndView model(String errorPage){
		
		ModelAndView mav = new ModelAndView(errorPage);
		mav.addObject("title", "访问出错");
		mav.addObject("message", "");
		
		return mav;
	}
	
	@ExceptionHandler(ServiceException.class)  
    public ModelAndView serviceExceptionHandle(HttpServletRequest request, Exception ex){  
		log.error(SystemInfo.LOG_CODE_ERROR, ex);
		
        return model("/error"); 
    }
	@ExceptionHandler(Exception.class)
    public ModelAndView exceptionHandle(HttpServletRequest request, Exception ex){  
		log.error(SystemInfo.LOG_CODE_ERROR, ex);
		exceptionService.insertYcxx(ex.getMessage(), "");
        return model("/error"); 
    } 
}

代码是没有任何问题的,网上一大堆。但无法起作用肯定是spring没有启动它。然后我加了个@EnableWebMvc在类

GlobalExceptionHandler上就OK了,@EnableWebMvc is equivalent to in XML。之前我的spring配置XML里是没有加
的,所以我在XML里面加了 
相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。
即解决了@Controller注解的使用前提配置。所以我之前用的拦截器org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
也要替换掉,否则会起冲突。
拦截器使用下面的配置方式

  
	    
	        
	          
	          
	            
	    
	        
	          
	          
	            
	       
	      
	 

这样就解决问题了。

你可能感兴趣的:(spring)