在使用hibernate validator進行參數有效性校驗的時候,我們有時候會遇到javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint ,比如,在我們的應用中,使用了自定義注解Dict對枚舉進行有效性校驗,因為定義的Dict應用于String類型,例如:
在如下校驗中就會失敗:
如下:
當遇到有些設計,取值為布爾類型,0代表false,1代表true的時候,采用了Integer類型,使用Dict注解的時候就會出現上述錯誤,對于該異常,原因是Dict的校驗器參數String不比對Integer,要解決該異常,我們可以再定義一個針對Integer有效性校驗的IntDict,如下所示:
注:為什麼不直接采用正則校驗呢?因為對于很多枚舉類型來說,取值範圍是業務随機定義的,此時可能依賴于常量、枚舉類甚至動态加載到緩存的定義進行校驗(看不同系統的設計約定和規範)。
花若盛開,蝶自飛來,你若精彩,幸福開懷!2020年12月11日-18日