public void setContact(ContactType type, String value) {
//check the value first
switch(type) {
case PHONENUMBER: {
if( !StringUtils.isNumeric(value) ) {
throw new IllegalArgumentException("phone number must be numeric");
}
break;
}
case EMAIL: {
//note: emails contain more than just numbers and alphabetic chars
if( !StringUtils.isAlphanumeric(value) ) {
throw new IllegalArgumentException("email must be alphanumeric");
}
break;
}
}
this.value = value;
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ContactTypeValidator.class)
public @interface ContactTypeValid {
String message() default "contact value invalid for specified type";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class ContactTypeValidator implements ConstraintValidator<ContactTypeValid, ContactDTO> {
@Override
public void initialize(ContactTypeValid constraint) {
}
@Override
public boolean isValid(ContactDTO contactDTO, ConstraintValidatorContext context) {
// put your logic here. e.g.
// deal with possible nulls
if(PHONENUMBER == contactDTO.getContacttype()) {
return contactDTO.getContactvalue().chars().allMatch(Character::isDigit);
}
return true;
}
}
您还需要在依赖项中实现验证,如spring-boot-starter-validation。 Spring文档获取更多信息:www.example.comhttps://docs.spring.io/spring-framework/docs/current/reference/html/core.html#validation-beanvalidation 和好点从@М г о р ь-Şо д ы к о.使用单独的字段.
4条答案
按热度按时间ac1kyiln1#
您可以编写一个接受枚举和值并基于枚举检查值的方法。
事情可以这么简单:
但是,您可能需要更多类型或更复杂的类型,因此可以尝试使用正则表达式(对于许多简单情况,“手动”创建的规则速度更快,但需要更复杂的设计):
并设置该值:
zd287kbt2#
ContactType应该是一个包含电子邮件、电话号码等字段的类,然后你可以验证你想要的每个字段。
wswtfjt73#
问题中确实没有太多的细节。既然你用"spring-boot"标记了这个问题,我想我们讨论的是
(javax|jakarta).validation.
的东西吧?在这种情况下,你可以使用类级验证。一些片段:
注解您的ContactDTO:
您还需要在依赖项中实现验证,如
spring-boot-starter-validation
。Spring文档获取更多信息:www.example.comhttps://docs.spring.io/spring-framework/docs/current/reference/html/core.html#validation-beanvalidation
和好点从@М г о р ь-Şо д ы к о.使用单独的字段.
tkqqtvp14#
如果您只需要一个数字验证器: