SpringBoot实体类校验与全局异常处理
1.引入maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.实体类校验规则
@Data
@EqualsAndHashCode(callSuper = true)
public class SysMenu extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 父菜单ID,一级菜单为0
*/
@NotNull(message="上级菜单不能为空")
private Long parentId;
@NotBlank(message = "菜单名称不能为空")
private String name;
/**
* 菜单URL
*/
private String path;
/**
* 授权(多个用逗号分隔,如:user:list,user:create)
*/
@NotBlank(message = "菜单权限编码不能为空")
private String perms;
private String component;
/**
* 类型 0:目录 1:菜单 2:按钮
*/
@NotNull(message = "菜单类型不能为空")
private Integer type;
/**
* 菜单图标
*/
private String icon;
/**
* 排序
*/
@TableField("orderNum")
private Integer orderNum;
private LocalDateTime updated;
@TableField(exist = false)
private List<SysMenu> children = new ArrayList<>();//子菜单
}
3.@validated注解校验实体类
当实体类出现异常时,交给全局异常处理器处理异常
public Result save(@Validated @RequestBody SysMenu sysMenu) {
return Result.success();
}
4.全局异常处理器
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result handler(MethodArgumentNotValidException e){
BindingResult bindingResult = e.getBindingResult();
ObjectError objectError = bindingResult.getAllErrors().stream().findFirst().get();
log.error("实体类校验异常:-------------{}",objectError.getDefaultMessage());
return Result.fail(objectError.getDefaultMessage());
}

浙公网安备 33010602011771号