Можно ли сделать так, чтобы объект бизнес-домена (Java-бин, скажем, пользователь) автоматически проверялся с помощью Spring и API-интерфейса валидации бина?

Допустим, у нас есть следующий класс пользователя:

public class User {

    @Positive
    private final long id;

    @NotNull(message = "The username is missing.")
    @Size(message = "Username too short",
        min = ValidationConstants.USERNAME_MIN_LENGTH)
    @Size(message = "Username too long",
        max = ValidationConstants.USERNAME_MAX_LENGTH)
    private final String username;


    public User(final String username) {
        this.id = new Random().nextLong();
        this.username = username;
    }

    public long getId() {
        return id;
    }

    public long getUsername() {
        return username;
    }

    public void setUsername(final String username) {
        this.username = username;
    }

    // Other methods...

}

Также у нас может быть класс обслуживания со следующими методами:

public class UserService {

    public User createUser(final String username) {
        return new User(username);
    }

    public void changeUsername(final long id, final String newUsername) {
        findById(id).ifPresent(user -> user.setUsername(newUsername));            
    }

    private Optional<User> findById(final long id) {
        // ...
    }
}

Не имея ничего кроме Spring (без JPA, без JAX-RS и т. Д., Только с Spring), возможно ли, чтобы класс User был осведомлен о механизме проверки? Я имею в виду, что после выполнения любого метода из него (может быть, те методы, которые должны быть проверены, имеют некоторую аннотацию или что-то в этом роде), экземпляры класса User должны быть действительными.

Я хочу, чтобы модели моей бизнес-области были самостоятельной единицей бизнес-логики (включая правила проверки для них).

1 ответ

Вы можете проверить ваш экземпляр компонента с помощью аннотации спецификации jsr 303(java validation 1.1) или jsr 349 (java validation 1.1). Валидатор Hibernate обеспечивает очень хорошую реализацию вышеуказанной спецификации.

Другой способ - реализовать интерфейс Spring Validator и разрешить сообщения об ошибках с помощью MessageCodesResolver,

Проверьте валидацию пружины

Другие вопросы по тегам