1.引入依赖(springboot2.3之后需要引入)
org.springframework.boot spring-boot-starter-validation 2.6.6
2 .在实体类字段上加上需要校验的注解
@NotEmpty
@URL(message = "logo必须是一个合法url地址")
private String logo;
/*** 介绍*/
private String descript;
/*** 显示状态[0-不显示;1-显示]*/
private Integer showStatus;
/*** 检索首字母*/
@NotNull
@Pattern(regexp="/^[a-zA-Z]$/",message = "检索首字母必须是一个字母")
private String firstLetter;
/*** 排序*/
@Min(value = 0, message = "排序必须大于等于0")
private Integer sort;
3.在Controller里使用@Valid开启校验
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand){brandService.save(brand);return R.ok();
}
4.定义一个统一的异常处理类
@Slf4j
@RestControllerAdvice(basePackages = "com.atguigu.gulimall.product.controller")
public class GulimallExceptionControllerAdvice {@ExceptionHandler(value = MethodArgumentNotValidException.class)public R handleValidException(MethodArgumentNotValidException e){log.error("数据校验出现问题{},异常类型{}",e.getMessage(),e.getClass());// 异常绑定结果BindingResult bindingResult = e.getBindingResult();Map map = new HashMap<>();bindingResult.getFieldErrors().forEach((fieldError)->{// 错误的字段描述String defaultMessage = fieldError.getDefaultMessage();// 错误的属性字段名String field = fieldError.getField();map.put(field,defaultMessage);});return R.error(BizCodeEnume.VALID_EXCEPTION.getCode(), BizCodeEnume.VALID_EXCEPTION.getMsg()).put("data",map);}
}
@Slf4j注解 开启日志
@RestControllerAdvice 统一异常处理并以json的方式返回
@RestController等同于 @ControllerAdvice +@ResponseBody
basePackages 配置扫描的引用路径(那些Controller需要统一异常处理)
@ExceptionHandler异常处理(说明哪些异常需要处理)
MethodArgumentNotValidException 方法参数无效异常
图上表示方法参数无限异常需要处理
5.调用接口返回