Spring – Spring Validation 校验

简介

Spring Validation 是由Spring 提供的应用于字段数据校验的包,我们可以使用它对某些字段进行合理的数据校验功能。

 

引入依赖

Spring Validation 由Spring提供,因此它包含有 Starter 起步依赖

我们可能通过增加以下依赖坐标得到包的引用

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

 

 

基本字段校验

对于某些基础字段,Validation 预先提供给我们,我们可以直接使用预置的校验即可。

@NotNull

@NotNull 会指定该字段接收时不允许为 Null,否则会报出异常,如下案例,我们可以对实体类中的字段进行校验

    @NotNull()
    private Integer id;//主键ID

也可以对Controller接收参数中进行数据校验

 

 

@PostMapping()
    public Result add(@RequestBody @NotNull Article article){
        articleService.add(article);
        return Result.success();
    }

 

message: 当校验不通过时,会使用这个作为提示

groups: 校验分组,只有符合某个条件时,才会使用这个校验

 

 

@NotEmpty

@NotEmpty 会指定该字段接收的数据不允许为空(非Null),否则会报出异常,如下案例:我们可以对实体类中的字段进行校验

@NotEmpty
    private String content;//文章内容

 

 

message: 当校验不通过时,会使用这个作为提示

groups: 校验分组,只有符合某个条件时,才会使用这个校验

 

@URL

故名思义,就是要求该字段中的数据必须为 url 格式的,否则会报出异常,如下案例为,该字段必须不能为空,且内容必须符合 url 格式

    @NotEmpty
    @URL
    private String coverImg;//封面图像

message: 当校验不通过时,会使用这个作为提示

groups: 校验分组,只有符合某个条件时,才会使用这个校验

 

@Email

故名思义,就是要求该字段中的数据必须为 邮箱地址 格式的,否则会报出异常

    @NotEmpty
    @Email
    private String email;

message: 当校验不通过时,会使用这个作为提示

groups: 校验分组,只有符合某个条件时,才会使用这个校验

 

 

注意

如果使用字段校验方式对字段进行校验时,我们需要在接收数据时,在Controller 中加入 @Validated 注解,如下

@PostMapping()
    public Result add(@RequestBody @Validated Article article){
        articleService.add(article);
        return Result.success();
    }

否则字段中的校验注解可能不会生效

 

 

校验分组定义

当我使用 @NotNull 对 Id 做字段校验时,当我新增时,不需要提供Id,但校验却拦截了

解决:可以使用分组校验:
分组效验是指定某些情况下需要校验,而某些情况下不需要校验。如新增时不校验,修改时则校验
可以创建一个 interface 接口,作为标记用,在校验注解处使用 group 定义什么时候才进行校验

   // 用于定义标记校验分组的接口
    public interface Add extends Default {  }

    public interface Update extends Default{  }

如下:

 @NotNull(groups = {Update.class})
 private Integer id;//主键ID

扩展:如果校验中,某一些成员变量在任何时候都应该被校验时,我们不需要像上面那样,把所有定义的标记都记上
而是让它们都继承 Default 接口,则作为默认组的校验
默认组校验不需要定义 groups
如下:

 @NotEmpty() // 默认使用 Default 校验组
 private String categoryName;

那么在 Controller 接收数据时,@Validated 就可以定义当前的操作,使校验分组生效
@Validated({Category.Update.class}) 则会指定包含该接口的分组才全被效验
如下:

 @PutMapping("/category")
 public Result updateCategory(@RequestBody @Validated({Category.Update.class}) Category category){
     return Result.success(categoryService.update(category));
 }

 

 

自定义字段校验

对于一些特殊情况下,Validation 所自带的校验方式已经不满足我们使用时,我们可以通过自定义校验方式,对字段数据做特殊的数据校验。

步骤:

1.创建一个注解,用于标记在字段上面,触发自定义校验。

2.创建一个类,继承 ConstraintValidator 接口中的方法,这个方法是用于处理校验逻辑的

3.在自定义的注解上,加上 @Constraint 注解,用于定义绑定校验逻辑类,绑定后,则这个注解将带有对应的校验功能。

 

实施:

1.创建一个注解:

@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint()
public @interface State {

    // 提供校验失败之后的提示信息
    String message() default "State参数的值只能是【已发布】或【草稿】";

    // 校验使用分组
    Class<?>[] groups() default {};

    // 负载 获取到State注解的附加信息
    Class<? extends Payload>[] payload() default {};
}

 

 

2.创建一个用于处理校验逻辑的类

/**
 *
 * ConstraintValidator<给哪个注解提供校验规则,校验的数据类型>
 */
public class StateValidation implements ConstraintValidator<State,String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        if (value == null) return false;
        if (value.equals("已发布") || value.equals("草稿")) return true;
        return false;
    }

 

 

3.在注解中绑定 2. 中创建的类

@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {StateValidation.class})
public @interface State {

    // 提供校验失败之后的提示信息
    String message() default "State参数的值只能是【已发布】或【草稿】";

    // 校验使用分组
    Class<?>[] groups() default {};

    // 负载 获取到State注解的附加信息
    Class<? extends Payload>[] payload() default {};
}

这样,在字段中直接使用这个注解,将可以实现自定义校验逻辑处理。

 

 

 

正则表达式校验

@Pattern

@Pattern 可以支持使用正则表达式来对数据进行校验

@Pattern(regexp = "^\\S{6,15}$")
private String content;

 

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Spring – Spring Validation 校验
简介 Spring Validation 是由Spring 提供的应用于字段数据校验的包,我们可以使用它对某些字段进行合理的数据校验功能。   引入依赖 Spring Validation 由Spring提供,因此它包含有 Star……
<<上一篇
下一篇>>