我使用的是Spring Boot。我知道有一个@Valid注解可以用在方法之上,所以如果它无效,它会抛出一个Exception,但我不想抛出一个异常,我只想忽略无效的对象。
假设我有一个模型类:
public class User {
@NotNull
private String name;
@AssertTrue
private boolean working;
@Size(min = 10, max = 200)
private String aboutMe;
@Email(message = "Email should be valid")
private String email;
}和这个流:
Stream<User> stream = getUsers();如何根据这个类的javax.validation注解进行过滤?
stream.filter(u -> isValid(u));发布于 2020-07-01 20:06:30
看起来spring在这里不会有什么帮助,但您仍然可以这样做。
这个@Valid批注处理实现基本上与项目Hibernate Validator集成在一起(不要混淆名称,它与Hibernate ORM ;)无关。
因此,您可以创建引擎并“手动”进行验证。
使用验证引擎的一个示例:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
User user = ...
Set<ConstraintViolation<User>> constraintViolations = validator.validate( user );正如您所看到的,hibernate validator中的验证结果并不是一个异常( spring在上面添加了一些东西,以便更好地与web mvc流集成),而是一组“验证约束冲突”。所以基本上这个集合不是空的,至少有一个验证错误,所以你可以过滤掉它。
我相信,一旦你熟悉了基础,将这个逻辑封装到过滤器中并不是那么有趣……
https://stackoverflow.com/questions/62676327
复制相似问题