Spring全局異常捕獲


 

 

package org.xxx.ac.zpk.exception;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.wpwl.ac.utils.JSONUtils;
import org.wpwl.ac.zpk.entity.ApiResult;
/**
 * 異常處理
 * @author xxx
 *
 */
public class ExceptionHandler implements HandlerExceptionResolver {
    private static final Logger logger = LoggerFactory.getLogger(ExceptionHandler.class);

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
            Exception ex) {
        ModelAndView mv = new ModelAndView();
        /* 使用response返回 */
        response.setStatus(HttpStatus.OK.value()); // 設置狀態碼
        response.setContentType(MediaType.APPLICATION_JSON_VALUE); // 設置ContentType
        response.setCharacterEncoding("UTF-8"); // 避免亂碼
        response.setHeader("Cache-Control", "no-cache, must-revalidate");
        try {
            ApiResult json = getExceptionResult(ex);
            response.getWriter().write(JSONUtils.bean2Json(json));
        } catch (IOException e) {
            logger.error("與客戶端通訊異常:" + e.getMessage(), e);
        }

        logger.debug("異常:" + ex.getMessage(), ex);
        return mv;
    }

    private ApiResult getExceptionResult(Exception ex) {
        ApiResult result;
        if (ex instanceof WPException) {
            result = ApiResult.err(ex.getMessage());
        } else {
            result = ApiResult.err("服務異常!");
        }
        return result;
    }

}
<bean id="exceptionResolver" class="org.wpwl.ac.zpk.exception.ExceptionHandler"/> 

 

 

package org.wpwl.ac.zpk.exception;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.wpwl.ac.zpk.entity.ApiResult;

public class ExceptionController {
    
//    private static final Logger logger = LoggerFactory.getLogger(BaseController.class);
    
    @ExceptionHandler
    @ResponseBody
    public ApiResult exception(HttpServletRequest request, Exception e) {
        //添加自己的異常處理邏輯,如日志記錄   
        request.setAttribute("exceptionMessage", e.getMessage());  
//        e.printStackTrace();
//        logger.error(e.getMessage());
        // 根據不同的異常類型進行不同處理
        if(e instanceof WPException){
            return ApiResult.err(e.getMessage());
        }
        else{
            return ApiResult.err("服務異常!");   
        }
    }  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM