当生活像一首歌那样轻快流畅时,笑颜常开乃易事;而在一切事都不妙时仍能微笑的人,是真正的乐观。——威尔科克斯
之前写过一篇springboot
实现validator
校验
今天进行一个补充
我们可以使用分组校验
首先是我们可以定义一个接口在我们的实现类里
然后在我们需要分组校验的注解上给上groups
参数
最后在controller
上也给我们的@Validated
注解加上我们的分组参数
最后运行就只会校验我们分组的参数
那如果有这么一种场景:一个接口,传入Id
时修改,不传入Id
时新增,修改和新增又是不同的校验的话,我们该怎么处理呢?
其实很简单,我们可以注入一个Validator
,然后在代码里进行分组校验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package com.ruben;
import com.ruben.pojo.User; import com.ruben.utils.SpringContextHolder; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.DependsOn;
import javax.annotation.Resource; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import javax.validation.Validator; import java.util.Objects; import java.util.Set;
@SpringBootTest @DependsOn("SpringContextHolder") class SimpleSpringbootApplicationTests {
@Resource private Validator validator;
@Test void test() { User user = User.builder().build(); Set<ConstraintViolation<User>> checkResult; if (Objects.isNull(user.getId())) { checkResult = validator.validate(user, User.AddCheck.class); } else { checkResult = validator.validate(user, User.UpdateCheck.class); } if (!checkResult.isEmpty()) { throw new ConstraintViolationException(checkResult); } }
}
|