javax.validationを使用して、注釈を使用してこれらの値(赤、青、緑、ピンク)のみが必要なcolorという文字列型の変数を検証する方法はありますか?
私は@size(min=1, max=25)
および_@notnull
_を見ましたが、このようなものがあります@In(red, blue, green, pink)
mysql
で使用される_In-keyword
_とほぼ同じ
その場合、以下のスニペットのように、@ Patternアノテーションを使用する方が簡単だと思います。大文字と小文字を区別しない評価が必要な場合は、適切なフラグを追加するだけです。
@Pattern(regexp = "red|blue|green|pink", flags = Pattern.Flag.CASE_INSENSITIVE)
カスタム検証アノテーションを作成できます。ここに書きます(テストされていないコード!):
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = InConstraintValidator.class)
public @interface In
{
String message() default "YOURPACKAGE.In.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default {};
Object[] values(); // TODO not sure if this is possible, might be restricted to String[]
}
public class InConstraintValidator implements ConstraintValidator<In, String>
{
private Object[] values;
public final void initialize(final In annotation)
{
values = annotation.values();
}
public final boolean isValid(final String value, final ConstraintValidatorContext context)
{
if (value == null)
{
return true;
}
return ...; // check if value is in this.values
}
}
列挙型を作成できます
public enum Colors {
RED, PINK, YELLOW
}
次に、モデルで次のように検証できます。
public class Model {
@Enumerated(EnumType.STRING)
private Colors color;
}
restControllerに@Validを追加した場合、ペイロードを列挙型に対して検証します。