1.引入依赖(springboot2.3之后需要引入)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.6.6</version>
</dependency>
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<String,String> 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.调用接口返回