package com.vincent.rsf.server.common.exception;
|
|
import com.vincent.rsf.framework.common.R;
|
import com.vincent.rsf.framework.exception.CoolException;
|
import com.vincent.rsf.server.common.constant.Constants;
|
import com.vincent.rsf.server.common.utils.CommonUtil;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.security.access.AccessDeniedException;
|
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
/**
|
* 全局异常处理器
|
*
|
* @author vincent
|
* @since 2018-02-22 11:29:30
|
*/
|
@ControllerAdvice
|
public class GlobalExceptionHandler {
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
|
@ResponseBody
|
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
|
public R methodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException e,
|
HttpServletResponse response) {
|
e.printStackTrace();
|
CommonUtil.addCrossHeaders(response);
|
return R.error("The request method is incorrect");
|
}
|
|
@ResponseBody
|
@ExceptionHandler(AccessDeniedException.class)
|
public R accessDeniedExceptionHandler(AccessDeniedException e, HttpServletResponse response) {
|
CommonUtil.addCrossHeaders(response);
|
return R.parse(Constants.UNAUTHORIZED_CODE + "-" + Constants.UNAUTHORIZED_MSG);
|
}
|
|
@ResponseBody
|
@ExceptionHandler(BusinessException.class)
|
public R businessExceptionHandler(BusinessException e, HttpServletResponse response) {
|
CommonUtil.addCrossHeaders(response);
|
return R.parse(e.getMessage());
|
}
|
|
@ResponseBody
|
@ExceptionHandler(CoolException.class)
|
public R coolExceptionHandler(CoolException e, HttpServletResponse response) {
|
CommonUtil.addCrossHeaders(response);
|
return R.error(e.getMessage());
|
}
|
|
|
@ResponseBody
|
@ExceptionHandler(Throwable.class)
|
public R exceptionHandler(Throwable e, HttpServletResponse response) {
|
logger.error(e.getMessage(), e);
|
CommonUtil.addCrossHeaders(response);
|
// 返回异常信息便于排查,避免仅返回 "Internal server error!"
|
String msg = e.getMessage() != null && !e.getMessage().isEmpty() ? e.getMessage() : e.getClass().getSimpleName();
|
if (e.getCause() != null && e.getCause().getMessage() != null && !e.getCause().getMessage().isEmpty()) {
|
msg = msg + "; cause: " + e.getCause().getMessage();
|
}
|
return R.error(msg);
|
}
|
|
}
|