2016-11-14 62 views
1

使用Spring RestControllers和hibernate驗證器。彈出驗證檢查字典

需要創建一些驗證註釋,它檢查驗證字段是否出現在某個字典(預設數組或某些數據庫)中。

例如,我有一些豆

@Service 
public class MyDict { 

    public boolean containsWord(String word) { 
     ... 
    } 
} 

和一些數據,我檢查

public class ResponseData { 

    @IsInDictionary(MyDict.class) 
    private String word; 

} 

當我打電話直接休眠的驗證,或者在RequestMapping方法@Valid註釋,我想驗證調用MyDict的bean方法containsWord(word)。

有沒有人有任何想法?

回答

1

您需要定義自己的註釋,然後定義自己的Validator在那裏你將要執行的驗證邏輯(在這種情況下,字典查找)

你可以閱讀更多關於此這裏:https://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-constraintannotation

創建自己的註釋之後,您只需擴展ConstraintValidator<YourCustomAnnotation, String>即可開始使用。 isValid()需要你提到的邏輯中執行方法:containsWord(word)

的好處是,你的自定義驗證可以是春季管理的bean,所以你可以自由地注入到的東西和它例如,執行數據庫查找。所以在這種情況下,您需要注入字典並在那裏執行檢查。

+0

如果我的理解正確,如果我提到我自己的驗證器爲spring bean,我的bean(不是我的類的另一個實例)將用作驗證器?我想今天檢查它,但我懷疑) – dmitryvim

+0

@dmitryvim如果您創建自己的註釋,有一個預定義的機制正在使用它進行驗證。簡單地說,你只需要適當地擴展ConstraintValidator,你應該很好。我最近做了這個,它工作:) –