我们在写接口的时候,一定会需要给接口的入参参数进行校验,例如:名称不能包含敏感词,不能长度超过,不能有奇怪的词等。但是如果参数过多,校验规则复杂,就会出现大量的 if-else 代码。不仅代码优雅,而且后期维护麻烦。所以SpringBoot提供了优雅的参数校验方式。
1:导入依赖包
因为是Springboot自带的参数校验,所以我们只需要引入Springboot-web包就可以了
<!-- SpringBoot Web容 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2:创建入参类
@Data
public class UserTask {
@NotNull(message = "用户id不能为空", groups = { Insert.class , Update.class })
private Long id;
@NotBlack(message = "用户名称不能为空", groups = { Update.class })
private String name;
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误", groups = {Insert.class, Update.class})
private String mobile;
}
-
@XXX:表示校验注解 如:@NotNull , @NotBlack
-
message : 表示 参数校验不通过的报错信息
-
group:表示这个参数在什么时候校验,是新增,还是修改,还是删除的时候。
常用注解:
3:在接口中使用方法
/**
* 走参数校验注解
*
* @param userDTO
* @return
*/
@PostMapping("/save/valid")
public RspDTO save(@RequestBody @Validated({Insert.class}) UserTask user) {
userService.save(userDTO);
return RspDTO.success();
}
注意要加 @Validated 注解
4: 在全局校验中增加校验异常
MethodArgumentNotValidException
是springBoot中进行绑定参数校验时的异常,需要在springBoot中处理,其他需要 处理ConstraintViolationException异常进行处理.
/**
* 自定义验证异常
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public Object validExceptionHandler(MethodArgumentNotValidException e)
{
log.error(e.getMessage(), e);
String message = e.getBindingResult().getFieldError().getDefaultMessage();
return message;
}