首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于javax.validation的Stream.filter

基于javax.validation的Stream.filter
EN

Stack Overflow用户
提问于 2020-07-01 19:58:59
回答 1查看 228关注 0票数 1

我使用的是Spring Boot。我知道有一个@Valid注解可以用在方法之上,所以如果它无效,它会抛出一个Exception,但我不想抛出一个异常,我只想忽略无效的对象。

假设我有一个模型类:

代码语言:javascript
复制
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;
}

和这个流:

代码语言:javascript
复制
Stream<User> stream = getUsers();

如何根据这个类的javax.validation注解进行过滤?

代码语言:javascript
复制
stream.filter(u -> isValid(u));
EN

回答 1

Stack Overflow用户

发布于 2020-07-01 20:06:30

看起来spring在这里不会有什么帮助,但您仍然可以这样做。

这个@Valid批注处理实现基本上与项目Hibernate Validator集成在一起(不要混淆名称,它与Hibernate ORM ;)无关。

因此,您可以创建引擎并“手动”进行验证。

使用验证引擎的一个示例:

代码语言:javascript
复制
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();

User user = ...
Set<ConstraintViolation<User>> constraintViolations = validator.validate( user );

正如您所看到的,hibernate validator中的验证结果并不是一个异常( spring在上面添加了一些东西,以便更好地与web mvc流集成),而是一组“验证约束冲突”。所以基本上这个集合不是空的,至少有一个验证错误,所以你可以过滤掉它。

我相信,一旦你熟悉了基础,将这个逻辑封装到过滤器中并不是那么有趣……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62676327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档