0
String
を特定のEnum
に対して検証するカスタムアノテーションを作成しようとしています。私はHibernate Validator API
を使用しています。望ましいユースケースは次のようになります。列挙型に対して文字列を検証するカスタム注釈
@MessageTypeOf(MessageType.NETWORK)
private String message;
String
(この場合、MessageType.NETWORK
)列挙引数として与えられた列挙のtoString()
メソッドから所与の値に対して検証されなければなりません。
私はバリデーターを書いており、このように見えます。
public class MessageTypeValidator implements ConstraintValidator<MessageTypeOf, String> {
private Set<String> values;
@Override
public void initialize(MessageTypeOf constraintAnnotation) {
values = Arrays.asList(MessageType.values())
.stream()
.map(v -> v.toString())
.collect(Collectors.toSet());
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if (s == null) return false;
return values.contains(s);
}
}
注釈。文字列は、私は特定のものに対して検証する必要があるとして列挙(任意の値)の一部である場合
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE, TYPE_USE })
@Retention(RUNTIME)
@Constraint(validatedBy = MessageTypeValidator.class)
@Documented
public @interface MessageTypeOf {
String message() default "{org.hibernate.validator.referenceguide.chapter06.CheckCase." +
"message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
MessageType value();
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Documented
@interface List {
MessageType[] value();
}
}
しかし、これは有効であろう。誰かがそれを行う方法を提案できますか?
あなたが同じように列挙型を使用していない理由がありますフィールドタイプは直接ですか? – chrylis