2013-12-11 64 views
0

的問題是很短:Bean驗證應用在接口類型

讓我們考慮有下面的類:

public class someClass implements someInterface { 
    @NotNull 
    String someString; 

    // ... some cool logic, getters, setters, etc. 
} 

該接口:

public interface SomeInterface { 
    // cool stuff 
} 

別的地方是這種方法:

public <T extends SomeInterface> T doStuff (T someInterface) { 
    Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); 
    Set<ConstraintViolation<T>> violatons = validator.validate(); 
    // ... 
    // ... 
    // ... 
    return someInterface; 
} 

我沒有太多的BV經驗。 SomeClass中的someString會被驗證,還是我需要明確地將SomeInterface轉換爲SomeClass?

這裏的場景被簡化了。實際上,我有不同的通用類和接口,它意味着有點工作。這就是我仔細詢問的原因。

希望有一個專家猶豫不決!

在此先感謝!

+0

您不需要明確地轉換它。它會爲你完成。 –

+0

因此,如果我驗證一個自由選擇的接口,實現類將始終按預期進行驗證? –

+0

是的,你不能驗證一個接口,你只能驗證一個實現。您擁有的實例是接口的實現,而不是接口本身。無論如何,該接口不能獨立存在。試試看看。 –

回答

1

Bean Validation將從經過驗證的實例的實際類型中獲得約束,即您可以傳遞接口類型的變量,並且Bean Validation將考慮來自實現的約束(在超類型和接口上聲明的約束應用爲好)。

+0

非常感謝!這是我在閱讀babas評論後一直在問自己。在接口上定義的約束是否適用於imolementation內部的約束。現在我更聰明瞭。 –