import com.alibaba.fastjson.JSONObject;
import com.epro.commons.response.ArgumentCode;
import com.epro.commons.response.ResponseResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author zss
* @description: TODO
* @date 2021/11/3 10:43
*/
@RestControllerAdvice
@Slf4j
public class RestExceptionHandler {
/**
* 处理Get请求的验证异常
*
* @param result
* @return com.flyduck.cms.vo.ApiResult
*/
@ExceptionHandler(BindException.class)
public ResponseResult bindExceptionHandle(BindingResult result) {
if (result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
/* List<String> list = new ArrayList<>();
errors.forEach(p ->{
FieldError fieldError = (FieldError) p;
list.add(fieldError.getDefaultMessage());
});*/
if (!errors.isEmpty() && !StringUtils.isEmpty(errors.get(0).getDefaultMessage())) {
return new ResponseResult(false, ArgumentCode.PARAMS_ERROR.getCode(), errors.get(0).getDefaultMessage(), null);
}
}
return new ResponseResult(ArgumentCode.PARAMS_ERROR);
}
/**
* 处理Post请求的验证异常
*
* @param exception
* @return com.flyduck.cms.vo.ApiResult
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseResult methodArgumentNotValidHandler(MethodArgumentNotValidException exception) {
BindingResult result = exception.getBindingResult();
if (result != null && result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
/*List<String> list = new ArrayList<>();
errors.forEach(p ->{
FieldError fieldError = (FieldError) p;
list.add(fieldError.getDefaultMessage());
});*/
if (!errors.isEmpty() && !StringUtils.isEmpty(errors.get(0).getDefaultMessage())) {
return new ResponseResult(false, ArgumentCode.PARAMS_ERROR.getCode(), errors.get(0).getDefaultMessage(), null);
}
}
return new ResponseResult(ArgumentCode.PARAMS_ERROR);
}
/**
* 处理请求参数格式的验证异常
*
* @param exception
* @return com.flyduck.cms.vo.ApiResult
*/
@ExceptionHandler(ConstraintViolationException.class)
public ResponseResult constraintViolationHandler(ConstraintViolationException exception) {
Set<ConstraintViolation<?>> violations = exception.getConstraintViolations();
if (violations.size() > 0) {
List<String> list = new ArrayList<>();
for (ConstraintViolation<?> violation : violations) {
list.add(violation.getMessage());
}
if (!list.isEmpty()) {
return new ResponseResult(false, ArgumentCode.PARAMS_ERROR.getCode(), list.get(0), null);
}
}
return new ResponseResult(ArgumentCode.PARAMS_ERROR);
}
@ExceptionHandler(CustomException.class)
public ResponseResult exception(Exception e) {
log.error("---------------------error:{}-------------------------", e.getMessage());
Map map = JSONObject.parseObject(e.getMessage(), Map.class);
return ResponseResult.create().msg((Integer) map.get("code"), (String) map.get("msg")).success((Boolean) map.get("success"));
}
}
Java工具-Valid校验异常捕获全局拦截器
最新推荐文章于 2024-11-25 21:11:16 发布