wisdomisite-java/src/main/java/com/zhgd/exception/ExceptionHandlerAdvice.java
2024-04-07 18:23:25 +08:00

87 lines
3.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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());
ex.printStackTrace();
}
log.error("异常请求路径:" + request.getRequestURI() + "--" + result.getMessage());
log.error("errr", 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<>();
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;
}
}