package com.common.aspect; import com.common.core.beans.Result; import com.common.core.enums.ResultCodeEnum; import com.common.core.exception.BizException; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 全局异常处理 */ @RestControllerAdvice(basePackages = { "com.deloitte.system.controller"}) @Slf4j public class CustomResponseAdvice { private Logger logger = LoggerFactory.getLogger(getClass()); //定义不同的方法处理不同类型的异常 @ExceptionHandler(Error.class) public Result baseErrorHandler(HttpServletRequest request, HttpServletResponse response, Error e) { log.error(e.getMessage(),e); response.setStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR); return Result.respErr(ResultCodeEnum.RT_ERROR); } @ExceptionHandler(OutOfMemoryError.class) public Result baseErrorHandler(HttpServletRequest request, HttpServletResponse response, OutOfMemoryError e) { log.error(e.getMessage(),e); response.setStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR); return Result.respErr(ResultCodeEnum.RT_ERROR); } @ExceptionHandler(Exception.class) public Result errorHandler(HttpServletRequest request, HttpServletResponse response, Exception e) { log.error(e.getMessage(),e); response.setStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR); return Result.respErr(ResultCodeEnum.RT_ERROR); } @ExceptionHandler({BizException.class}) @ResponseBody public Result handleBusinessException(HttpServletRequest request, HttpServletResponse response, BizException e){ log.error(e.getMessage(),e); return Result.resp(e.getCode(), e.getMessage()); } @ExceptionHandler({MethodArgumentNotValidException.class}) @ResponseBody public Result handleException(MethodArgumentNotValidException e){ log.error(e.getMessage(),e); return Result.resp(ResultCodeEnum.RT_PARAM_ERROR); } }