/**
* 参数校验统一处理
*/
@Log4j
@Aspect
@Component
public class ParamValidAspect {
/**
* 校验错误处理
* @param joinPoint
* @param bindingResult
* @return
* @throws Throwable
*/
// 切入点表达式,指向要执行校验的方法
@Around("execution(* com.**.controller.*.*(..)) && args(..,bindingResult)")
public Object validateParam(ProceedingJoinPoint joinPoint, BindingResult bindingResult) throws Throwable {
Object obj = null;
if (bindingResult.hasErrors()) {
// 有校验错误
obj = getErrors(bindingResult);
} else {
// 没有错误方法继续执行
obj = joinPoint.proceed();
}
return obj;
}
/**
* 解析校验错误
* @param bindingResult
* @return
*/
public ResponseEntity getErrors(BindingResult bindingResult) {
List<String> errors = new ArrayList<>();
List<ObjectError> allErrors = bindingResult.getAllErrors();
allErrors.forEach(x -> {
FieldError fieldError = (FieldError) x;
String msg = x.getDefaultMessage();
errors.add(fieldError.getField() + msg);
});
// 自己封装返回错误的格式
Result<Object> responseData = new Result<>(ResultEnum.EXCEPTION,"校验错误", errors);
ResponseEntity responseEntity = new ResponseEntity<Result>(responseData, HttpStatus.OK);
return responseEntity;
}
}
SpringMVC参数使用切面统一校验
最新推荐文章于 2024-06-25 11:04:46 发布