Проблем със съобщение за грешка при валидиране на множество полета на 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