import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.servlet.NoHandlerFoundException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
 * @desc: 异常统一拦截处理
 * @auth: zhangsy
 * @data: 2019/9/3 13:30
 */
@RestControllerAdvice
@ResponseBody
public class GlobalDefultExceptionHandler {

    Logger logger = LoggerFactory.getLogger(this.getClass());
    /**
     * @auth: zhangsy
     * @desc: 服务不存在
     * @data: 2019/9/3 13:31
     * @return: 异常信息
     */
    @ExceptionHandler(value = NoHandlerFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public Map errorHandler(HttpServletRequest request, NoHandlerFoundException exception, HttpServletResponse response,Exception e) {
        return getExceptionInfo("服务不存在",404,e);
    }
    /**
     * @auth: zhangsy
     * @desc: 请求方式不支持
     * @data: 2019/9/3 13:31
     * @return: 异常信息
     */
    @ExceptionHandler(HttpMediaTypeNotSupportedException.class)
    public Map errorHandler(HttpServletRequest request, HttpMediaTypeNotSupportedException exception, HttpServletResponse response,Exception e) {
        return getExceptionInfo("请求方式有误",1004,e);
    }
    /**
     * @desc: 请求参数缺失
     * @auth: zhangsy
     * @data: 2019/9/18 14:12
     * @return:
     */
    @ExceptionHandler(MissingServletRequestParameterException.class)
    public Map errorMissingServletRequestParameterExceptionHandler(MissingServletRequestParameterException e) {
        return getExceptionInfo("请求缺少参数 " +  e.getParameterName(),400,e);
    }
    /**
     * @desc: 请求参数类型错误
     * @auth: zhangsy
     * @data: 2019/9/18 14:12
     * @return:
     */
    @ExceptionHandler(MethodArgumentTypeMismatchException.class)
    public Map errorMethodArgumentTypeMismatchExceptionHandler(MethodArgumentTypeMismatchException e) {
        return getExceptionInfo("参数类型错误 " +  e.getParameter().getParameterName(),1003,e);
    }

    /**
     * @auth: zhangsy
     * @desc: 请求方式错误
     * @data: 2019/9/3 13:31
     * @return: 异常信息
     */
    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public Map handleHttpRequestMethodNotSupportedException(Exception e) {
        return getExceptionInfo("请求方式不对",405,e);
    }

    /**
     * 总的异常处理
     */
    @ExceptionHandler(Exception.class)
    public Map handleException(Exception e) {
        return getExceptionInfo("error",500,e);
    }

    /**
     * 异常处理响应客户端状态
     */
    public Map getExceptionInfo(String msg, Integer resultcode, Exception e){
        Map resultDate = new HashMap();
        resultDate.put("msg",msg);
        resultDate.put("resultcode",resultcode);
        logger.error(e.getMessage(),e);
        return resultDate;
    }
}

 

最后修改于 2020-03-02 17:18:59
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇