Проверка бина JSR-303 с помощью Spring и iBatis - PullRequest
0 голосов
/ 17 августа 2011

Возможно ли с помощью проверки bean-компонента JSR-303 написать пользовательскую аннотацию, которая может взаимодействовать с серверной службой?

Мы выполнили этот тип проверки с помощью валидаторов Spring старой школы.В этом случае валидатор был бином Spring, и в него могли быть добавлены другие сервисы.Затем этот валидатор внедряется в контроллер.

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

ПРИМЕЧАНИЕ. Мы используем iBatis / MyBatis, чтобы я могНе используйте трюки JPA / Hibernate: -)

спасибо!

1 Ответ

0 голосов
/ 18 августа 2011

Это определенно возможно.Spring обеспечивает поддержку внедрения зависимостей также в валидаторах ограничений.Таким образом, вы можете просто добавить любые необходимые сервисы в свои пользовательские валидаторы, например:

public class EmailExistsValidator implements ConstraintValidator<EmailExists, String> {

    @Inject
    private EmailValidationService service;

    @Override
    public void initialize(EmailExists constraintAnnotation) {}

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {

        if (value == null) {
            return true;
        }

        return service.exists(value);
    }
}

В зависимости от вашего конкретного сценария может быть хорошей идеей сначала проверить «дешевые» ограничения, такие как @NotNull, и только еслиэти ограничения действительны, проверьте более дорогие ограничения, такие как @EmailExists.

Это можно сделать с помощью групповых последовательностей и переопределенной стандартной групповой последовательности для вашего типа.

...