Подтвердить что ты не робот

Hibernate Validator - @Length - как указать отдельное сообщение для min и max?

Я использую валидатор Hibernate для проверки формы в своем веб-приложении. Я использую аннотацию @Length для моего атрибута String следующим образом:

@Length(min = 5, message = "The field must be at least 5 characters")
private String myString;

Тем не менее, мне нужно отобразить другое сообщение, если строка содержит более 50 символов. Есть ли способ использовать готовое средство проверки длины @Length для этого? Пример того, что я хотел бы сделать (компилятор не позволит мне), выглядит следующим образом:

@Length(min = 5, message = "The field must be at least 5 characters")
@Length(max = 50, message = "The field must be less than 50 characters")
private String myString;

Я пробовал @Max и @Min, и они не делают того, что я хочу. Любой вход был бы оценен с благодарностью!

4b9b3361

Ответ 1

Вы можете указать несколько ограничений @Length для одного элемента, используя внутреннюю аннотацию списка (которая определена для каждого типа ограничений в Bean Validation/Hibernate Validator) следующим образом:

@List({
    @Length(min = 5, message = "The field must be at least 5 characters"),
    @Length(max = 50, message = "The field must be less than 50 characters")
})
private String myString;

Btw. Я рекомендую @Размер, как определено Bean API проверки над @Length по причинам переносимости.

Ответ 2

В соответствии с документацией вы можете использовать @Length(min=, max=) с одним сообщением. Затем просто измените свое сообщение на "Поле должно быть от 5 до 50 символов"

Ответ 3

Если вы используете java-стандарт javax.validation.constraint.Size, вы можете добиться того же: таким образом:

@Size.List ({
    @Size(min=8, message="The field must be at least {min} characters"),
    @Size(max=60, message="The field must be less than {max} characters")
})
private String myString;

Обратите внимание, что вы можете избежать жесткого кодирования размера поля с помощью интерполяции сообщений.