114 lines
4.0 KiB
Java
114 lines
4.0 KiB
Java
package org.app.exception;
|
||
|
||
import org.app.common.BaseErrorCode;
|
||
import org.app.common.ResponseVO;
|
||
import org.hibernate.validator.internal.engine.path.PathImpl;
|
||
import org.springframework.validation.BindException;
|
||
import org.springframework.validation.BindingResult;
|
||
import org.springframework.validation.FieldError;
|
||
import org.springframework.validation.ObjectError;
|
||
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 javax.validation.ConstraintViolation;
|
||
import javax.validation.ConstraintViolationException;
|
||
import java.util.Set;
|
||
|
||
/**
|
||
* @author: Chackylee
|
||
* @description:
|
||
**/
|
||
@RestControllerAdvice
|
||
public class GlobalExceptionHandler {
|
||
|
||
|
||
@ExceptionHandler(value=Exception.class)
|
||
@ResponseBody
|
||
public ResponseVO unknowException(Exception e){
|
||
e.printStackTrace();
|
||
ResponseVO resultBean =new ResponseVO();
|
||
resultBean.setCode(BaseErrorCode.SYSTEM_ERROR.getCode());
|
||
resultBean.setMsg(BaseErrorCode.SYSTEM_ERROR.getError());
|
||
/**
|
||
* 未知异常的话,这里写逻辑,发邮件,发短信都可以、、
|
||
*/
|
||
return resultBean;
|
||
}
|
||
|
||
|
||
/**
|
||
* Validator 参数校验异常处理
|
||
*
|
||
* @param ex
|
||
* @return
|
||
*/
|
||
@ExceptionHandler(value = ConstraintViolationException.class)
|
||
@ResponseBody
|
||
public Object handleMethodArgumentNotValidException(ConstraintViolationException ex) {
|
||
|
||
Set<ConstraintViolation<?>> constraintViolations = ex.getConstraintViolations();
|
||
ResponseVO resultBean =new ResponseVO();
|
||
resultBean.setCode(BaseErrorCode.PARAMETER_ERROR.getCode());
|
||
for (ConstraintViolation<?> constraintViolation : constraintViolations) {
|
||
PathImpl pathImpl = (PathImpl) constraintViolation.getPropertyPath();
|
||
// 读取参数字段,constraintViolation.getMessage() 读取验证注解中的message值
|
||
String paramName = pathImpl.getLeafNode().getName();
|
||
String message = "参数{".concat(paramName).concat("}").concat(constraintViolation.getMessage());
|
||
resultBean.setMsg(message);
|
||
|
||
return resultBean;
|
||
}
|
||
resultBean.setMsg(BaseErrorCode.PARAMETER_ERROR.getError() + ex.getMessage());
|
||
return resultBean;
|
||
}
|
||
|
||
@ExceptionHandler(ApplicationException.class)
|
||
@ResponseBody
|
||
public Object applicationExceptionHandler(ApplicationException e) {
|
||
// 使用公共的结果类封装返回结果, 这里我指定状态码为
|
||
ResponseVO resultBean =new ResponseVO();
|
||
resultBean.setCode(e.getCode());
|
||
resultBean.setMsg(e.getError());
|
||
return resultBean;
|
||
}
|
||
|
||
/**
|
||
* Validator 参数校验异常处理
|
||
*
|
||
* @param ex
|
||
* @return
|
||
*/
|
||
@ExceptionHandler(value = BindException.class)
|
||
@ResponseBody
|
||
public Object handleException2(BindException ex) {
|
||
FieldError err = ex.getFieldError();
|
||
String message = "参数{".concat(err.getField()).concat("}").concat(err.getDefaultMessage());
|
||
ResponseVO resultBean =new ResponseVO();
|
||
resultBean.setCode(BaseErrorCode.PARAMETER_ERROR.getCode());
|
||
resultBean.setMsg(message);
|
||
return resultBean;
|
||
|
||
|
||
}
|
||
|
||
//json格式
|
||
@ExceptionHandler(value = MethodArgumentNotValidException.class)
|
||
@ResponseBody
|
||
public Object handleException1(MethodArgumentNotValidException ex) {
|
||
StringBuilder errorMsg = new StringBuilder();
|
||
BindingResult re = ex.getBindingResult();
|
||
for (ObjectError error : re.getAllErrors()) {
|
||
errorMsg.append(error.getDefaultMessage()).append(",");
|
||
}
|
||
errorMsg.delete(errorMsg.length() - 1, errorMsg.length());
|
||
|
||
ResponseVO resultBean =new ResponseVO();
|
||
resultBean.setCode(BaseErrorCode.PARAMETER_ERROR.getCode());
|
||
resultBean.setMsg(BaseErrorCode.PARAMETER_ERROR.getError() + " : " + errorMsg.toString());
|
||
return resultBean;
|
||
}
|
||
|
||
}
|