大家好,我是小资。今天给大家说下参数校验。
标题中说的这三个注解所在的包路径为import javax.validation.constraints.*;
千万不要导错包哦,因为他们在好多包里都存在。开发只需引入Spring-web依赖就可以使用了。轻轻松松干掉多余的if-else。
下面我们就一起看看它们具体怎么使用和有什么区别呢。
介绍和区别
@NotNull
适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为 Null(但是可以为 Empty)
源码包注释
源码注释翻译:被注释的元素不能为空。接受任何类型。
注:被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制
@NotBlank
适用于 String 类型的数据上,加了@NotBlank 注解的参数不能为 Null 且 trim() 之后 size > 0,必须有实际字符
源码包注释
源码注释翻译:带注释的元素不能为空,并且必须包含至少一个非空白字符。接受CharSequence。
@NotEmpty
适用于 String、Collection集合、Map、数组等等,加了@NotEmpty 注解的参数不能为 Null 或者 长度为 0
源码包注释
源码注释翻译:被注释的元素既不能为null也不能为空。
使用方法
实体类使用方法
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ArticleRequest implements Serializable {
private static final long serialVersionUID=1L;
@NotBlank(message = "请填写文章标题")
@Length(max = 200, message = "文章标题最多200个字符")
private String title;
@NotBlank(message = "请填写文章作者")
@Length(max = 50, message = "文章作者最多50个字符")
private String author;
@NotNull(message = "是否热门不能为空")
private Boolean isHot;
@NotEmpty(message = "其他推荐文章不能为空")
private List<ArticleRequest> articleRequestList;
}
Controller方法的使用
以上这些校验的注解都是需要@Valid 或@Validated 配合上使用才会生效的,还可以对新增和修改做单独的配置
@Valid 包位置:import javax.validation.Valid;
@Validated 包的位置:
import org.springframework.validation.annotation.Validated;
/**
* 新增文章管理表
* @param articleRequest 新增参数
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody @Valid ArticleRequest articleRequest) {
if (articleService.create(articleRequest)) {
return CommonResult.success();
} else {
return CommonResult.failed();
}
}
/**
* 新增文章管理表
* @param articleRequest 新增参数
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public CommonResult<String> save(@RequestBody @Validated ArticleRequest articleRequest) {
if (articleService.create(articleRequest)) {
return CommonResult.success();
} else {
return CommonResult.failed();
}
}
@Valid 和 @Validated 比较
最后我们来对 @Valid 和 @Validated 两个注解简单对比下
-
@Valid 和 @Validated 两者都可以对数据进行校验,待校验字段上打的规则注解(@NotNull, @NotEmpty等)都可以对 @Valid 和 @Validated 生效;
-
@Valid 进行校验的时候,需要用 BindingResult 来做一个校验结果接收。当校验不通过的时候,如果手动不 return ,则并不会阻止程序的执行;
-
@Validated 进行校验的时候,当校验不通过的时候,程序会抛出400异常,阻止方法中的代码执行,这时需要再写一个全局校验异常捕获处理类,然后返回校验提示。
总体来说,@Validated 使用起来要比 @Valid 方便一些,它可以帮我们节省一定的代码,并且使得方法看上去更加的简洁。
新增和修改单独配置
在开发中我们会遇到某些字段是新增是必传的而修改不是必传,这种情况我们就可以单独对其进行指定。以下为配置方法。
-
字段配置
@NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
其中groups属性就可以实现该字段的单独设置说,其中AddGroup和EditGroup是自己定义的两个接口文件,它们两个类中没有任何代码,只需要将接口创建下即可。
-
@Validated指定
@Validated(EditGroup.class)
在注解中填写需要校验的场景,以上事例为只校验修改,其参数是数组格式,需要填写多个时换成数组格式即可
@Validated({AddGroup.class,EditGroup.class})
此包下其它常用的校验注解:
其他注解和解释
总结
-
@NotEmpty :用于集合类,不能为null,且size>0
-
@NotNull:不能为null,但可以为empty,没有size的约束
-
@NotBlank:只用于String,不能为null,且trim()之后size>0
-
@Validated比@Valid较为好用
结束语
以上则参数校验的注解使用和对比,快去试试吧!
如果大家觉得文章内容不错,快去分享给更多小伙伴吧。
创作不易,感谢大家的支持,多多关注、分享、点赞,您的鼓励是我前进的动力。