簡體   English   中英

如何使用構造函數中的Java驗證器注釋?

[英]how to use Java validator annotations from constructor?

我有持有String值對象。 該字符串受到一些限制(長度,允許的字符等)。

我想使用Java或Spring驗證API來驗證我的對象。 我想在創建時(在構造函數中)驗證我的域對象。

實現此目的的示例代碼(使用驗證API this進行驗證):

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管理的代碼(服務)中,我可以只是javax.validation.Validatororg.springframework.validation.Validator @Autowire實例,它可以正常工作。

但是如何使它在Spring托管代碼之外(在value對象的構造函數中,獨立存在)工作呢?

我知道我可以使用ifs編寫驗證規則,但是驗證注釋使代碼更簡單。

Hibernate Validator文檔描述了如何獲取javax.validation.Validator的實例

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

但是不適合在構造函數中構建ValidatorFactory 這是耗時的操作。 也許在thrad-local中使用緩存的引用會有所幫助,但是我不喜歡這種增加的復雜性。

最后,我決定使用Guava前提條件為我的值對象編寫驗證規則。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM