39

javax.validationを使用して、アノテーションを使用してこれらの値(赤、青、緑、ピンク)のみを持つ必要があるcolorというタイプの文字列の変数を検証する方法はありますか?

私は見 たことが@size(min=1, max=25)あり@notnullますが、このようなものはありますか@In(red, blue, green, pink)

In-keywordで使用されるものと多かれ少なかれ似ていますmysql

4

4 に答える 4

107

その場合、以下のスニペットのように、@Patternアノテーションを使用する方が簡単だと思います。大文字と小文字を区別しない評価が必要な場合は、適切なフラグを追加するだけです。

@Pattern(regexp = "red|blue|green|pink", flags = Pattern.Flag.CASE_INSENSITIVE)

于 2013-01-24T12:55:02.960 に答える
12

カスタム検証アノテーションを作成できます。ここに書きます(テストされていないコードです!):

@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
    }

}
于 2011-03-03T09:50:02.117 に答える
3

列挙型を作成できます

public enum Colors {
    RED, PINK, YELLOW
}

次に、モデルで次のように検証できます。

public class Model {
    @Enumerated(EnumType.STRING)
    private Colors color;
}

RestControllerに@Validを追加した場合、列挙型に対してペイロードを検証します。

于 2017-10-16T11:34:49.803 に答える
1

独自に検証クラスを作成できます。参考のためにhttps://www.javatpoint.com/spring-mvc-custom-validation

于 2021-04-30T10:48:03.043 に答える