一般校验
如果springboot2.3版本以上
引入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 在实体类的属性上添加校验注解,如@NotNull @NotBlank @Email等,可通过赋值message属性设置校验异常信息。
@NotNull(message = "修改必须指定品牌id")
- 在controller方法参数前加上@Valid注解
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand, BindingResult bindingResult){
if(bindingResult.hasErrors()){
Map<String,String> map=new HashMap<>();
bindingResult.getFieldErrors().forEach((item)->{
map.put(item.getField(),item.getDefaultMessage());
});
return R.error(400,"提交的数据不合法").put("data",map);
}
brandService.save(brand);
return R.ok();
}
调用后端接口如果参数不满足条件则会返回异常信息
分组校验
- 通过校验注解的groups属性设置分组,一个分组即一个空接口,一个校验规则可归属多个分组中间用逗号隔开
@NotBlank(message = "品牌名不能为空",groups = {AddGroups.class})
2.改用@Validated注解启用指定分组下的校验规则,可启用多个分组,也用逗号隔开
public R save(@Validated(AddGroups.class,UpdateGroups.class)@RequestBody BrandEntity brand, BindingResult bindingResult){
以上代表该controller方法启用AddGroups分组和UpdateGroups下的校验规则
集中处理异常
新建集中处理异常类,使用springmvc的ControllerAdvice
/**
* 集中处理controller抛出的异常
*/
@Slf4j
@RestControllerAdvice(basePackages = "com.atguigu.gulimall.product.controller")
public class GulimallExceptionControllerAdvice {
@ExceptionHandler(value= MethodArgumentNotValidException.class)
public R handleVaildException(MethodArgumentNotValidException e){
log.error("数据校验出现异常{},异常类型:{}",e.getMessage(),e.getClass());
BindingResult bindingResult=e.getBindingResult();
Map<String,String> map=new HashMap<>();
bindingResult.getFieldErrors().forEach((item)->{
map.put(item.getField(),item.getDefaultMessage());
});
return R.error(BizCodeEnume.VALID_EXCEPTION.getCode(),BizCodeEnume.VALID_EXCEPTION.getMsg()).put("data",map);
}
@ExceptionHandler(value= Throwable.class)
public R handleException(Throwable e){
log.error("系统未知异常");
return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(), BizCodeEnume.UNKNOW_EXCEPTION.getMsg());
}
}