我的电子邮件字符串字段用javax.validation.constraints.Email
注释:
import javax.validation.constraints.Email;
public class MyModel {
@Email
private String email;
}
当前,当调用相应的api端点时,hibernate-validator的org.hibernate.validator.internal.constraintvalidators.AbstractEmailValidator
自动对其进行验证:
@Controller("/v1")
@Validated
public class MyController {
...
@Put(uri = "/{id}")
@Produces("application/json")
public IdType updateEntity(@Valid MyModel model) {
return delegate.updateEntity(model);
}
}
我如何注册我的自定义类以使用Micronaut的验证程序验证电子邮件字段,同时仍使用原始的javax.validation.constraints.Email
注释?
这是我的自定义约束验证器的外观:
import javax.inject.Singleton;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.constraints.Email;
@Singleton
public class EmailValidator implements ConstraintValidator<Email, String> {
@Override
public void initialize(Email constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
return value.contains("@");
}
}
Micronaut版本:1.1.4
答案 0 :(得分:0)
将验证器从@Email
更改为@MailAdress
或任何非标准注释。
每个人都希望@Email
是从Javax / Hibernate导入的。
如果您要添加行为,还可以检查@Pattern
(因为@Email
批注中未选中点)
答案 1 :(得分:0)
您似乎正在寻找的是这个
HibernateValidatorConfiguration configuration = Validation
.byProvider( HibernateValidator.class )
.configure();
ConstraintMapping constraintMapping = configuration.createConstraintMapping();
constraintMapping
.constraintDefinition( Email.class )
.includeExistingValidators( false )
.validatedBy( MyEmailValidator.class );
configuration.addMapping( constraintMapping );
这是一种针对现有约束条件“替换”现有验证器的编程方式。有关此详细信息,请检查doc
的这一部分