wisdomisite-java/src/main/java/com/zhgd/exception/ExceptionHandlerAdvice.java
2024-07-03 16:11:21 +08:00

86 lines
3.3 KiB
Java

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<Object> restError(HttpServletRequest request, HttpServletResponse response, Exception ex) {
Result<Object> 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<String, String> errorMap = new HashMap<>(16);
bindingResult.getFieldErrors().forEach((fieldError) -> {
errorMap.put(fieldError.getField(), fieldError.getDefaultMessage());
});
List<String> messageList = bindingResult.getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(Collectors.toList());
Result<Object> r = new Result<>();
r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500);
r.setMessage(StrUtil.format("请输入合理的数据:{}", StringUtils.join(messageList)));
r.setResult(errorMap);
return r;
}
}