2017-04-12 167 views
0

我使用的bean的驗證功能冬眠,驗證發現HV000030:沒有驗證可以爲約束「javax.validation.constraints.Size」驗證型「java.util.Map」

驗證邏輯

public enum ValidatorFactory { 
    SINGLE_INSTANCE { 

    javax.validation.ValidatorFactory avf = Validation.buildDefaultValidatorFactory(); 

    @Override 
    public Validator getValidator() { 
    return avf.getValidator(); 
    } 

    }; 

    public abstract Validator getValidator(); 
} 

我打電話,其具有如下面

@UnwrapValidatedValue 
@Valid 
@Size(min = 1, max = 9) 
private Optional<Map<Integer, AreaType>> field; 

錯誤 javax.validation.UnexpectedTypeException可選字段一個對象上validator.validate(OBJ):HV000 030:不能爲約束'javax.validation.constraints.Size'驗證類型'java.util.Map'找到驗證器。

回答

0

根據JPA文檔:

的字段的大小或屬性進行評估,並且必須在指定 邊界相匹配。如果字段或屬性是字符串,則會評估字符串的大小 。如果字段或屬性是Collection, 則評估Collection的大小。如果該字段或​​屬性是一個 地圖,則會評估該地圖的大小。如果字段或屬性是 數組,則會評估數組的大小。使用可選的max 或min元素之一來指定邊界。

這樣說你不能把@Size放在可選類型上,但只能在String,Collections和Arrays上。

嘗試刪除可選類型,像這樣:

@Size(min = 1, max = 9) 
private Map<Integer, AreaType> field;