利用SpringBoot Validation快速实现数据校验

前言

在实际开发中,肯定会经常遇到对参数字段进行校验的场景,虽然大多数情况下前端都会进行校验,但我们知道前端并不可信,所以后台也需要进行校验,通常我们只能写大量的if else来完成校验工作,而如果使用SpringBoot Validation则可以轻松的通过注解来完成。

环境配置

引入Jar包

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

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

使用示例

@Data
@ToString
public class DemoEntity {
	
	// 不能为空,比较时会除去空格
    @NotBlank(message = "名称不能为空")
    private String name;
	
	// amount必须是一个大于等于5,小于等于10的数字
    @DecimalMax(value = "10")
    @DecimalMin(value = "5")
    private BigDecimal amount;

	// 必须符合email格式
    @Email
    private String email;
	
	// size长度必须在5到10之间
    @Size(max = 10, min = 5)
    private String size;
	
	// age大小必须在18到35之间
    @Min(value = 18)
    @Max(value = 35)
    private int age;
	
	// user不能为null
    @NotNull
    private User user;
	
	// 限制必须为小数,且整数位integer最多2位,小数位fraction最多为4位
    @Digits(integer = 2, fraction = 4)
    private BigDecimal digits;
	
	// 限制必须为未来的日期
    @Future
    private Date future;

	// 限制必须为过期的日期
    @Past
    private Date past;
	
	// 限制必须是一个未来或现在的时间
    @FutureOrPresent
    private Date futureOrPast;
	
	// 支持正则表达式
	@Pattern(regexp = "^\\d+$")
	private String digit;
}

注意:请求时,参数必须加上@Validated才能生效

@RestController
@Slf4j
@RequestMapping("/valid")
public class TestValidController {

    @RequestMapping("/demo1")
    public String demo12(@Validated @RequestBody DemoEntity demoEntity) {
        try {
            return "SUCCESS";
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            return "FAIL";
        }
    }
}

分组

有些时候,同一个参数在不能场景下校验的规则可能不一样,这时候我们就可以通过分组的方式来实现

实体类name属性设置了两种校验,分别针对groups为A和B的生效

@NotBlank(message = "名称不能为空", groups = A.class)
@Size(max = 10, min = 5, groups = B.class)
private String name;

只要在相对应的接口上选择A或者B即可

@RestController
@Slf4j
@RequestMapping("/valid")
public class TestValidController {

    @RequestMapping("/demo1")
    public String demo1(@Validated({A.class}) @RequestBody DemoEntity demoEntity) {
        try {
            return "SUCCESS";
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            return "FAIL";
        }
    }

    @RequestMapping("/demo2")
    public String demo2(@Validated({B.class}) @RequestBody DemoEntity demoEntity) {
        try {
            return "SUCCESS";
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            return "FAIL";
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码拉松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值