![](/img/trans.png)
[英]spring mvc javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.String
[英]javax.validation.UnexpectedTypeException: No validator could be found for type:
以下是我們在嘗試對Integer類型的大小和模式進行驗證時得到的錯誤。 你能建議嗎,我們需要在驗證器bean.xml中設置Integer類型的大小和模式驗證
05:58:57,342 ERROR [ErrorLoggerEJBInterceptor] Unexpected system error: No validator could be found for type: java.lang.Integer
javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer
at org.hibernate.validator.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:244)
我只是在閱讀這篇文章,但可能是類型Integer無法應用於Pattern約束嗎? 它將解釋為什么拋出UnexpectedTypeException,因為只有在annoted類型與約束規范不匹配時才會拋出它。
我發現EE7的Pattern約束有以下內容:“帶注釋的CharSequence必須與指定的正則表達式匹配。正則表達式遵循Java正則表達式約定,參見Pattern。接受CharSequence。null元素被認為是有效的。”
src: http : //docs.oracle.com/javaee/7/api/javax/validation/constraints/Pattern.html
在EE6中,它似乎僅限於String:“帶注釋的字符串必須...接受字符串。空元素被認為是有效的。”
src: http : //docs.oracle.com/javaee/6/api/javax/validation/constraints/Pattern.html
例:
@Pattern(regexp = "<insert regex here>")
Integer evaluateMe;
這應該導致UnexpectedTypeException,因為Pattern約束需要CharSequence(EE7)或String(EE6),但是找到類型Integer。
輸入后我讀了Sridhar DD的參考文獻,證實了它:)
您必須已實現此類ConstraintValidator並重寫此方法?
@Override
public boolean isValid(XYZclass xyz, ConstraintValidatorContext context) {
將XYZclass更改為Integer並實現ConstraintValidator<XYZContraint, Integer>
謝謝@Honey Goyal下面是我的方式
@Documented
@Constraint(validatedBy = { AllowedIntegerValuesValidator.class})
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@ReportAsSingleViolation
public @interface AllowedValues {
String message() default "";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
String[] value() default { };
}
public class AllowedIntegerValuesValidator implements ConstraintValidator<AllowedValues, Integer> {
private List<Integer> valueList;
@Override
public void initialize(AllowedValues constraintAnnotation) {
valueList = new ArrayList<>();
for (String val : constraintAnnotation.value()) {
valueList.add(Integer.parseInt(val));
}
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
if (!valueList.contains(value)) {
return false;
}
return true;
}
}
@AllowedValues(value={"7","9"}, message="only could be 7 or 9")
private int location;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.