Проблема с сообщением об ошибке при проверке нескольких полей bean-компонента

Я использовал групповую последовательность, чтобы предотвратить одновременное отображение двух сообщений об ошибках для поля электронной почты, когда я устанавливаю электронную почту как пустую строку (""). Если я не использую групповую последовательность, она будет отображать как «требуется электронная почта», так и «неверный формат электронной почты».

Затем у меня возникла еще одна проблема после использования групповой последовательности. Я установил пустую строку ("") в поле суммы и установил krchoigmail.com в поле электронной почты. Он отображает только сообщение об ошибке «Требуется сумма» из-за групповой последовательности. Мне нужно отобразить «неверный формат электронной почты». также сообщение об ошибке. Как мне этого добиться? Я искал много раз, но не нашел ответа на этот вопрос. Пожалуйста помоги.

@NotBlank(message = "{error.req.integer.amount}")
public String getAmount() {
    return amount;
}

@NotBlank(message = "{error.req.email}")
@Email(message = "{error.format.email}", groups = ValidInput.class)
public String getEmail() {
    return email;
}

person user3123690    schedule 20.12.2013    source источник


Ответы (2)


@NotBlank и @Email оба используют "" как недопустимое значение. Вы можете подумать о добавлении какой-либо службы преобразования, которая преобразует "" в Null и заменяет ограничение @NotBlank на @NotNull. Null не запускает @Email, а запускает только @NotNull. В этом случае группы не нужны.

Что касается вашего второго вопроса, ограничение по умолчанию в группе javax.validation.groups.Default. Вы явно устанавливаете ограничение @Email в группе ValidInput.class.

person Markus Malkusch    schedule 25.12.2013
comment
Привет Маркус. Почему-то я не мог много писать в этом поле для комментариев. Итак, я добавил свой комментарий в поле «Ответы». - person user3123690; 04.01.2014

Маркус: Спасибо, что ответили мне. Я должен использовать это поле ответа, так как у меня нет репутации 50, чтобы писать относительно комментарий. Действительно, @NotNull не запускал @Email. Я решил свою проблему, написав пользовательские проверки, но ваши ответы мне нравятся больше, чем пользовательские проверки. Не могли бы вы дать мне некоторые подробности о том, почему @NotBlank запускает @Email, а @NotNull нет? Кажется, такое поведение делает @NotBlank менее полезным. Я воспользовался вашим предложением, и оно сработало. Мне не нужна была группа. Спасибо.

@NotNull(message = "{error.req.email}")
@Email(message = "{error.format.email}")
public String getEmail() {
    return email;
}

public void setEmail(String email) {
    if ((email != null) && email.trim().isEmpty()) {
        email = null;
    } else {
        this.email = email;
    }
}
person user3123690    schedule 03.01.2014
comment
Значение Null не вызывает @Email. JSR 349 ​​(ранее JSR 303) предлагает в качестве хорошей практики, чтобы ConstraintValidators рассматривали значение Null как допустимое. @Email Hibernate следует этому предложению. - person Markus Malkusch; 04.01.2014