87 lines
3.4 KiB
Java
87 lines
3.4 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());
|
||
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;
|
||
}
|
||
}
|