Spring統合例外処理の@ControllerAdviceが使用できない問題

2759 ワード

最近のプロジェクトでは@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に追加しました.D e f a u l t AnnotationHandlerMappingとAnnotationMethodHandlerAdapterの2つのbeanを登録し、messageconverterを構成することに相当します.@Controller注記の使用前提設定が解決しました.だから私が前に使っていたブロックorg.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMappingも置き換えなければなりません.そうしないと衝突します.ブロッキングは次の構成を使用します.
  
	    
	        
	          
	          
	            
	    
	        
	          
	          
	            
	       
	      
	 

これで問題が解決した.