2016-08-08 4 views
0

У меня есть объект ценности, который содержит String. Эта строка подвержена некоторым ограничениям (длина, допустимые символы и т. Д.).Как использовать аннотации валидатора Java от конструктора?

Я хотел бы использовать API проверки Java или Spring для проверки моего объекта. Я хотел бы подтвердить свой объект домена во время создания (в конструкторе).

Пример кода, который понимает, что (проверяет this с помощью проверки API):

void validate() { 
     LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); 
     Set<ConstraintViolation<Msisdn>> violations = localValidatorFactoryBean.getValidator().validate(this); 
     if (!violations.isEmpty()) { 
      throw new ConstraintViolationException(violations); 
     } 
    } 

Я не знаю, как получить экземпляр javax.validation.Validator из конструктора.

В Spring-управляемый код (услуга) Я мог бы просто @Autowire экземпляр javax.validation.Validator или org.springframework.validation.Validator, и она работает.

Но как заставить его работать вне управляемого Spring кода (в конструкторе объекта ценности, который стоит сам по себе)?

Я знаю, что могу писать правила проверки с использованием ifs, но аннотации для проверки делают код намного проще.

ответ

0

Hibernate Validator documentation describes how to get instance of javax.validation.Validator

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
Validator validator = factory.getValidator(); 

Но он не подходит для создания ValidatorFactory в конструкторе. Это занимает много времени. Может быть, использование кешированной ссылки в thrad-local поможет, но мне не нравится эта повышенная сложность.

Наконец, я решил написать правила проверки для моих объектов значений с помощью Guava Preconditions

Preconditions.checkNotNull(value, "value cannot be null"); 

 Смежные вопросы

  • Нет связанных вопросов^_^