为什么要分组?
案例:在添加时,前端传到后端的对象是没有id值的,
而在修改时,前端传到后端时有id值的,那么将无法进行校验,
因为你不管规定有值或者无值,另一方必然无法满足
此时,我们需要进行分组即可解决问题
如何定义组:一个组就是一个接口,随便定义
如何分组:1,在属性注解中设置属性groups=接口.class
2,在方法形参中@Validated(接口.class)
示例:
当然,如果我们在形参中设置了分组,那么没有在这个组中的其他校验就不会生效,
所以我们还需要把其他属性的校验一并加入到组中
当不符合校验时,后台会有一个异常,我们的处理可以使用捕获这个异常,然后处理,
返回给前端我们在校验时定义好的message
package com.sm.qy28.exception;
import com.sm.qy28.common.http.AxiosResult;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//返回json格式
@RestControllerAdvice
public class MyExceptionHander {
//捕获这类的异常
@ExceptionHandler(MethodArgumentNotValidException.class)
//返回map集合
public AxiosResult<Map<String,String>> hander(MethodArgumentNotValidException e){
HashMap<String, String> hashMap = new HashMap<>();
BindingResult bindingResult = e.getBindingResult();
//判断是否有错误
if( bindingResult.hasErrors()){
//把错误放到集合中
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (int i = 0; i < fieldErrors.size(); i++) {
hashMap.put(fieldErrors.get(i).getField(),fieldErrors.get(i).getDefaultMessage());
}
}
return AxiosResult.success(EnumStatus.JIAOYAN_ERROR,hashMap);
}
}