SpringBoot-Validation快速校验

一、引入依赖

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

二、校验注解介绍

限制说明
@NotNull不为null
@NotEmpty①不为null ②字符串或集合长度>0
@NotBlank①只能校验字符串 ②不为null ③字符串去除前后缀空格后仍有内容
@Min限制最小值(整数)
@Max限制最大值(整数)
@Size限制长度在min~max之间
@DecimalMin限制最小值
@DecimalMax限制最大值
@Email对邮箱格式进行校验
@Pattern通过正则表达式进行校验

如果要开始校验规则,需要在接收数据的对象前面加上 @Validated 注解

三、分组校验

组是用 Java接口 来表示的,如下面的 增、删、改、查 四个组:

/**
 * 对校验类型进行分组
 */
public class ValidationGroup {
    public interface Insert {}		//	增
    public interface Delete {}		//	删
    public interface Update {}		//	改
    public interface Select {}		//	查
}

每一个校验的注解上都有group属性,它可以为当前校验规则指定所属组,若不指定则为默认组, 如:

public class Student {
    
    //	默认组
    @NotNull			
    private Long id;
    
    //  新增组、修改组
    @NotEmpty( groups = {ValidationGroup.Insert.class,ValidationGroup.Update.class} )	
    private String name;
}

当激活新增组校验或者修改组校验时,name属性将会进行不为空的校验,激活组校验可以通过@Validated注解的value属性指定

如果不指定激活的组则激活默认组,此时id会进行不为null的校验

@RestController
public class StudentController {
    
    @PostMapping
    public void add(  @Validated(value={ValidationGroup.Insert.class})  //  对新增组字段进行校验
                      @RequestBody	Student student) 
    {
        //	...
    }
}

四、案例

这里我导入了lombok,不想导入也可以手动生成get、set方法、无参、全参构造

校验分组

/**
 * 对校验类型进行分组
 */
public class ValidationGroup {
    public interface Insert {}
    public interface Delete {}
    public interface Update {}
    public interface Select {}
}

校验的实体类

import com.example.config.ValidationGroup;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.*;
import javax.validation.groups.Default;
import java.time.LocalDate;
import java.util.Date;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student {

    @NotNull(
            message = "id不能为空",
            groups = {
                    ValidationGroup.Update.class,   //  更新组
                    ValidationGroup.Delete.class,   //  删除组
            })
    private Long id;

    @Size(min = 1,max = 5,message = "姓名长度必须在1~5个字符")
    @NotEmpty(
                message = "姓名不能为空",
                groups = {ValidationGroup.Insert.class} //  新增组
    )
    private String name;

    @Min(   value = 0,message = "年龄必须>=0",
            groups = ValidationGroup.Insert.class
    )          //  新增组
    @Max(
            value = 120,message = "年龄超过了120岁",
            groups = {ValidationGroup.Insert.class}
    )      //  新增组
    private Integer age;

    @Pattern(   regexp = "\\d{4}(\\-|\\/|.)\\d{1,2}\\1\\d{1,2}",message = "生日格式必须是yyyy-MM-dd",
                groups = {ValidationGroup.Insert.class}
    )  //  默认组
    private String birthday;

    @Email(message = "邮箱格式有误",groups = {ValidationGroup.Insert.class})   //  默认组
    private String email;
}

控制层

import com.example.config.ValidationGroup;
import com.example.model.Student;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

@RestController
@RequestMapping("/student")
public class StudentController {

    @PostMapping
    public String add(@Validated(ValidationGroup.Insert.class)  //  对新增组字段校验
                      @RequestBody Student student) {
        return "添加成功";
    }

    @PutMapping
    public String update(@Validated({ValidationGroup.Update.class})     //  对更新组字段校验
                         @RequestBody Student student) {
        return "更新成功";
    }

    @DeleteMapping
    public String delete(@Validated(value={ValidationGroup.Delete.class})	//  对删除组字段校验
                         @RequestBody Student student) {
        return "删除成功";
    }
}

希望通过SpringBoot的Validation校验能帮助小伙伴们解决大多数校验!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值