1/🧑🏼🏭起因
报错
No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating type ’
2/🧑🏫背景介绍
我们一般写接口的时候需要做参数校验,特别是一些必填的字段,如果不填,我们的逻辑和业务根本无法进行下去,那么免不了要做参数校验,当前Java开发这么多年已经完善出很多框架帮我们实现这样的自动校验参数的功能了。
/**
* 管理员修改自己的密码.
* @param param
* @param result
* @return
*/
@ApiOperation("管理员修改自己的密码.")
@PostMapping("/adminReSetSelfPwd")
public Result adminReSetSelfPwd(@Valid @RequestBody ResetSelfPwdParam param, BindingResult result) {
if (result.hasErrors()) {
return ResultUtils.toResult(ViewResultCodeEnum.PARAM_INVALID);
}
param.setUserId(getUserId());
userService.adminReSetSelfPwd(param);
return ResultUtils.toResult(ResultCodeEnumMsg.SUCCESS);
}
然后在参数里面加上校验的注解,这样就可以实现自动校验了,我们最常用的注解是@NotNull
数据非空和@NotBlank
字符串非空或空字符串,空字符串就是只有空白的字符串都认定为空哦
具体的参数里面的校验的注解使用方式如下
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
/**
* 重设自己的密码.
*
* @author : Q
* @version : 1.0 2021/7/31
* @since : 1.0
**/
@Data
public class ResetSelfPwdParam {
@ApiModelProperty(value = "当前管理员ID",hidden = true)
private Long userId;
@ApiModelProperty(value = "旧密码")
@NotBlank
private String oldPwd;
@ApiModelProperty(value = "新密码")
@NotBlank
private String newPwd;
@ApiModelProperty(value = "邮箱验证码")
@NotBlank
private String emilCode;
@ApiModelProperty(value = "谷歌验证码")
@NotBlank
private String googleCOde;
}
3/🧙错误问题原因
其实主要的问题原因就是引错了包,@NotNull
就是java自带的注解即可,导入的包是这个import javax.validation.constraints.NotNull;
spring的可以识别。
但是字符串非空判断的注解@NotBlank
Java也自带,却不支持,spring支持的字符串的注解是hibernate的注解,完整的引入是这个。
import org.hibernate.validator.constraints.NotBlank;
之前看到使用的是这个注解,还以为spring是兼容了hibernate的这注解,结果使用Java自带的这个@NotBlank
注解报错了,才知道不支持Java本身的这个注解,难受。
日常偷图,(侵删-。-)