package com.zhgd.exception; import cn.hutool.core.util.StrUtil; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.constant.CommonConstant; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.execption.OpenPromptException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; 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.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @program: itbgpproject * @description: 统一异常处理 * @author: Mr.Peng * @create: 2020-08-05 14:53 **/ @ResponseBody @Slf4j @ControllerAdvice public class ExceptionHandlerAdvice { @ExceptionHandler(Exception.class) @ResponseBody public Result restError(HttpServletRequest request, HttpServletResponse response, Exception ex) { Result result = new Result<>(); if (ex instanceof OpenAlertException) { OpenAlertException e = (OpenAlertException) ex; result.setCode(e.getCode()); result.setMessage(e.getMessage()); result.setSuccess(false); } else if (ex instanceof CustomException) { CustomException appException = (CustomException) ex; result.setCode(403); result.setMessage(appException.getMessage()); result.setSuccess(false); } else if (ex instanceof OpenPromptException) { OpenPromptException appException = (OpenPromptException) ex; result.setCode(200); result.setMessage(appException.getMessage()); result.setResult(appException.getResult()); } else { result.error500(ex.getMessage() == null ? "操作中出现空指针!" : ex.getMessage()); } log.error("异常请求路径:" + request.getRequestURI() + "--" + result.getMessage()); log.error("", ex); return result; } /** * Bean校验友好返回信息 * * @param e * @return */ @ExceptionHandler(value = MethodArgumentNotValidException.class) @ResponseBody public Result handleVaildException(MethodArgumentNotValidException e) { log.error("数据校验出现问题{},异常类型:{}", e.getMessage(), e.getClass()); BindingResult bindingResult = e.getBindingResult(); Map errorMap = new HashMap<>(16); bindingResult.getFieldErrors().forEach((fieldError) -> { errorMap.put(fieldError.getField(), fieldError.getDefaultMessage()); }); List messageList = bindingResult.getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(Collectors.toList()); Result r = new Result<>(); r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500); r.setMessage(StrUtil.format("请输入合理的数据:{}", StringUtils.join(messageList))); r.setResult(errorMap); return r; } }