2014-01-14 17 views
2

我們使用Spring MVC,Jackson for json,Hibernate ORM。我們需要添加前端驗證。我遇到了Hibernate驗證器。hibernate驗證器,json模式生成和使用常見約束條件

我們有一組使用JPA註釋的Domain類[DO類]。 我們有另一套爲Json綁定註解的POJO類[DTO類]。

我們要實現基礎設施,執行以下操作:

  1. DTO類指DO類約束[適用],這樣的事實是同一個地方。
  2. 再次通過重用JPA批註生成json模式。
  3. 驗證其餘呼叫的輸入。

例如,不要使用以下:

PersonDTO{ 
    @NotNull 
    @Size(min=2, max=60) 
    private String firstName; 
} 

如何:

PersonDTO{ 
    @MapsTo(com.xyz.domain.PersonDO.firstName.Size) // referring to the JPA annotation 
    private String firstName; 
} 

,然後自定義驗證數字出來的約束通過查看JPA註釋堅持。

我列出的策略是一種典型的方法嗎?任何反饋或意見表示讚賞。你能指點我相關的任何文章? 謝謝。

回答

0

在Hibernate Validator中,不存在用於將約束從一個模型複製到另一個模型的開箱即用功能,但您可以使用現有的API自己實現它。

更具體地說,在運行時爲您的類型提供了一個用於retrieving constraint metadata(由Bean驗證標準化)的API和一個用於dynamically putting constraints的API(由Hibernate Validator提供)。您可以使用前者來讀取您的領域模型的約束,並使用後者來驅動在DTO模型上創建等效約束。爲此,您當然需要一種策略來匹配源模型和目標模型的相應類型和屬性。

+0

謝謝你Gunnar。指針是有幫助的。我已經實現了動態添加約束的邏輯。我使用了下面的代碼片段,但是,實際的驗證沒有看到我添加的約束條件。我認爲應用程序通過spring bean的hibernate validator配置與我增強的不同。如何通過LocalValidatorFactoryBean將約束添加到Spring使用的配置中?謝謝你的幫助。 – user19937

+0

HibernateValidatorConfiguration配置= Validation.byProvider(HibernateValidator.class).configure(); ConstraintMapping m = configuration.createConstraintMapping(); (Class c:dtoClasses){ addConstraintsToClass(c,m,handled); } Validator validator = configuration.addMapping(m).buildValidatorFactory()。getValidator(); – user19937

+0

我不確定這是否可能與LocalValidatorFactoryBean。您可以禁用它,而是註冊您的自定義配置的Validator bean。 – Gunnar