gpt4 book ai didi

java - 除 hibernate-validator 之外的 Jersey Bean 验证

转载 作者:行者123 更新时间:2023-12-02 13:35:38 24 4
gpt4 key购买 nike

当我尝试使用 jersey 验证电子邮件 ID 时,内置的 hibernate-validator 未正确验证它,以下字符串 lafalsdf@ga 被评估为有效,并且它处于闲置状态JSR 303 是旧的。我需要根据 JSR 311 和 JSR 339 进行验证的库。或者任何其他比 hibernate-validator 更好的库

如果有任何图书馆请推荐我。我进行了研究,但没有找到任何结果。

并且还给我在 Jersey 中配置它的代码

最佳答案

首先,像 lafalsdf@ga 这样的 emailId 根据 RFC 822 ( see here ) 是有效的,因为 ga 是有效的本地主机名。由于大多数电子邮件 validator 都遵循 RFC 822,因此他们也认为它是有效的。 Hibernate Validator、Java 的 native InternetAddress.validate() 等就是这种情况。但是有 Apache Commons Validator项目提供了在执行验证时忽略本地地址的选项。

如果您只关心电子邮件验证,则无需寻找 Hibernate Validator 的替代品。您可以编写使用 Apache commons validator 的自定义注释和 validator ,如下所示。

@Constraint(validatedBy = CommonsEmailValidator.class)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface CommonsEmail {
String message() default "{org.hibernate.validator.constraints.Email.message}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

/**
* Defines several {@code @Email} annotations on the same element.
*/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
public @interface List {
CommonsEmail[] value();
}

public static class CommonsEmailValidator implements ConstraintValidator<CommonsEmail, CharSequence> {

@Override
public void initialize(CommonsEmail annotation) {
}

@Override
public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
return EmailValidator.getInstance(false).isValid(value.toString());
}

}
}

现在,您可以使用新的 @CommonsEmail 代替 @EmailEmailValidator 是公共(public) validator 库的一部分。因此,请确保 commons-validator.jar 在您的类路径中。

关于java - 除 hibernate-validator 之外的 Jersey Bean 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43013006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com