Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Валидация конструкторов и методов

Ограничения Bean Validation могут быть наложены на параметры нестатических методов и конструкторов и на возвращаемые значения нестатических методов. Статические методы и конструкторы не будут проверяться.

public class Employee {
...
  public Employee (@NotNull String name) { ... }

  public void setSalary(
      @NotNull
      @Digits(integer=6, fraction=2) BigDecimal salary,
      @NotNull
      @ValidCurrency
      String currencyType) {
    ...
  }
...
}

В этом примере класс Employee имеет ограничение конструктора, требующее имени, и имеет два набора ограничений параметров метода. Размер заработной платы работника не должен быть null, не может быть больше шести цифр слева от десятичной запятой и не может содержать более двух цифр справа от десятичной запятой. Тип валюты не должен быть null и валидируется с использованием пользовательского ограничения.

Если вы добавляете ограничения методов к классам в иерархии объектов, необходимо соблюдать особую осторожность, чтобы избежать непреднамеренного изменения поведения дочерних типов. См. Использование ограничений методов в иерархиях типов для получения дополнительной информации.

Ограничения группы параметров

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

@ConsistentPhoneParameters
@NotNull
public Employee (String name, String officePhone, String mobilePhone) {
  ...
}

В этом примере пользовательское ограничение группы параметров @ConsistentPhoneParameters проверяет соответствие формата телефонных номеров, переданных в конструктор. Ограничение @NotNull применяется ко всем параметрам в конструкторе.

Совет:

Аннотации ограничений группы параметров применяются непосредственно к методу или конструктору. Ограничения возвращаемого значения также применяются непосредственно к методу или конструктору. Чтобы избежать путаницы относительно того, где применяется ограничение — в параметре или возвращаемом значении — выберите имена для всех пользовательских ограничений, которые определяют, где применяется каждое ограничение. Например, предыдущий пример применяет пользовательское ограничение @ConsistentPhoneParameters, которое указывает, что оно применяется к параметрам метода или конструктора.

Когда вы создаёте пользовательское ограничение, которое применяется как к параметрам метода, так и к возвращаемым значениям, элемент validationAppliesTo аннотации ограничения может быть установлен в ConstraintTarget.RETURN_VALUE или ConstraintTarget.PARAMETERS для явной установки цели ограничения валидации.

Валидация типов аргументов параметризованных типов

В Bean Validation 2.0 можно применять ограничения к типам аргументам параметризованных типов. Например: List<@NotNull Long> numbers; Ограничения могут применяться к элементам типов контейнеров, таким как List, Map, Optional и другие.

List<@Email String> emails;
public Map<@NotNull String, @USPhoneNumber String> getAddressesByType() { }

В этом примере @Email является предустановленным ограничением, поддерживаемым валидацией бинов, а @USPhoneNumber является пользовательским ограничением. Смотрите Использование предустановленных ограничений для создания нового ограничения.

@USPhoneNumber имеет ElementType.TYPE_USE одним из своих @Target, и поэтому можно использовать ограничение @USPhoneNumber для валидации типов аргументов параметризованных типов.

Выявление нарушений ограничений параметров

Если во время вызова метода возникает ConstraintViolationException, среда выполнения Bean Validation возвращает индекс параметра, чтобы определить, какой параметр вызвал это нарушение. Индекс параметра имеет вид `arg`PARAMETER_INDEX, где PARAMETER_INDEX — целое число, которое начинается с 0 для первого параметра метода или конструктора.

Добавление ограничений на возвращаемые значения при вызове метода

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

@NotNull
public Employee getEmployee() { ... }

Ограничения группы параметров также применяются на уровне методов. Пользовательские ограничения, которые могут применяться как к возвращаемому значению, так и к параметрам метода, имеют неоднозначную цель ограничения. Чтобы избежать этой неоднозначности, добавьте элемент validationAppliesTo в определение аннотации ограничения со значением по умолчанию, равным ConstraintTarget.RETURN_VALUE или ConstraintTarget.PARAMETERS, чтобы явно установить цель ограничения валидации.

@Manager(validationAppliesTo=ConstraintTarget.RETURN_VALUE)
public Employee getManager(Employee employee) { ... }

См. Устранение неоднозначности в целях ограничений для получения дополнительной информации.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)