Sag*_*wal 1 java validation spring java-8
我正在处理 POJO 的 spring 和 spring 验证。
在 POJO 内部,我有一些字段,其值将映射到特定ENUM
类。
正如下面的代码中提到的,我的 cardType 字段为CardType ENUM
.
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Max;
@Data
@SuperBuilder(toBuilder = true)
@RequiredArgsConstructor
@EqualsAndHashCode
class SamplePOJO {
private String cardType;
@Length(max = 20)
private String name;
@Max(10)
private int number
}
public enum CardType {
VISA, MASTER;
}
Run Code Online (Sandbox Code Playgroud)
对于姓名和号码我可以做@Max and @Length
。我如何对属于提到的cardType应用验证enum
。同样在将来,我可能List
还需要检查值。所以如果有人可以指导我。
一种方法是编写用于枚举验证的自定义注释。并在现场使用它
@EnumNamePattern
private CardType cardType;
Run Code Online (Sandbox Code Playgroud)
自定义注释
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = EnumNamePatternValidator.class)
public @interface EnumNamePattern {
String message() default "invalid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
自定义注释验证器
public class EnumNamePatternValidator implements ConstraintValidator<EnumNamePattern, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) return true;
return Arrays.stream(CardType.values()).anyMatch(e -> e.name().equals(value));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3172 次 |
最近记录: |