Controller层中增加校验
1.入参的对象上面增加
这种校验的注解,message上可写不满足时的话术,group是用来,如果有多个方法的入参使用同一个对象,但是每个方法所需的参数不一致,每个方法上面标记一个interface,表明这个方法需要用到那些参数是必传的。
可直接在Form中定义接口
2.在方法入参前增加 @Validated 注解 如果需要指定interface,在后面增加interface
3.增加全局异常处理 这里只是捕捉到异常,获取到所有的异常描述,具体要返回给前段什么内容,视情况而定,我这里是将所有异常组装为字符串返回给前段
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 参数效验异常处理器
*
* @param e 参数验证异常
* @return ResponseBean
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseBean parameterExceptionHandler(MethodArgumentNotValidException e) {
LogUtil.warn("参数验证异常-MethodArgumentNotValidException", e);
// 获取异常信息
BindingResult exceptions = e.getBindingResult();
// 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
if (exceptions.hasErrors()) {
List<ObjectError> errors = exceptions.getAllErrors();
if (!errors.isEmpty()) {
//将所有的异常拿到
StringBuilder sb = new StringBuilder();
for (int i = 0; i < errors.size(); i++) {
if (i == errors.size() - 1) {
sb.append(errors.get(i).getDefaultMessage());
} else {
sb.append(errors.get(i).getDefaultMessage()).append(",");
}
}
return new ResponseBean(false, sb.toString());
}
}
return new ResponseBean(false, BaseResultCode.PARAM_EMPTY.getCode());
}
/**
* 参数效验异常处理器
*
* @param e 参数验证异常
* @return ResponseBean
*/
@ExceptionHandler(BindException.class)
public ResponseBean parameterExceptionHandler(BindException e) {
LogUtil.warn("参数验证异常-BindException", e);
// 获取异常信息
BindingResult exceptions = e.getBindingResult();
// 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
if (exceptions.hasErrors()) {
List<ObjectError> errors = exceptions.getAllErrors();
if (!errors.isEmpty()) {
//将所有的异常拿到
StringBuilder sb = new StringBuilder();
for (int i = 0; i < errors.size(); i++) {
if (i == errors.size() - 1) {
sb.append(errors.get(i).getDefaultMessage());
} else {
sb.append(errors.get(i).getDefaultMessage()).append(",");
}
}
return new ResponseBean(false, sb.toString());
}
}
return new ResponseBean(false, BaseResultCode.PARAM_EMPTY.getCode());
}
(不用这全局异常也行,在方法中手动增加一个BindingResult 包是‘org.springframework.validation’,通过这个对象的hasErrors()方法也能判断有没有异常,如果有异常,返回true,然后拿到所有的异常也行,看你需要那种)
boolean b = bindingResult.hasErrors();
if (b){
List<ObjectError> allErrors = bindingResult.getAllErrors();
allErrors.forEach(objectError -> {
String defaultMessage = objectError.getDefaultMessage();
//defaultMessage 就是一个异常描述 后续操作自己看自己的需求
});
}