[英]JSR 303 ConstraintValidator in scala with spring mvc
我混合了scala-java spring-boot mvc項目。 我正在嘗試使用javax.validation.ConstraintValidator
為請求bean實現自定義驗證器
我在這里和其他主題中讀到,最好用Java編寫注釋。scala是否支持JSR-303驗證?
我在Java和Scala中的ConstraintValidator類中編寫了自定義Constraint批注,但是當我指定@Constraint(validatedBy = ScalaCustomerValidator.class)時,它給出了Type mismatch: cannot convert from Class<ScalaCustomerValidator> to Class<? extends ConstraintValidator<?,?>>[]
編譯錯誤Type mismatch: cannot convert from Class<ScalaCustomerValidator> to Class<? extends ConstraintValidator<?,?>>[]
Type mismatch: cannot convert from Class<ScalaCustomerValidator> to Class<? extends ConstraintValidator<?,?>>[]
。 我的ScalaCustomerValidator確實擴展了ConstraintValidator。
// java的
@Constraint(validatedBy = ScalaCustomerValidator.class) //Type mismatch error
@Target(value = ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ScalaCustomerValid {
String message() default "Invalid tab to filter combination";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
// ConstraintValidator的標量定義
class ScalaCustomerValidator extends ConstraintValidator[ScalaCustomerValid, ScalaCustomer] { .. }
javap輸出:
javap ScalaCustomerValidator
Warning: Binary file ScalaCustomerValidator contains com.ScalaCustomerValidator
Compiled from "ScalaCustomerValidator.scala"
public class com.ScalaCustomerValidator implements javax.validation.ConstraintValidator<com.ScalaCustomerValid, com.ScalaCustomer> {
public void initialize(com.ScalaCustomerValid);
public boolean isValid(com.ScalaCustomer, javax.validation.ConstraintValidatorContext);
public boolean isValid(java.lang.Object, javax.validation.ConstraintValidatorContext);
public void initialize(java.lang.annotation.Annotation);
public com.ScalaCustomerValidator();
}
您的問題是由於無法獲取Scala對象的類引起的。 Scala編譯器為對象ScalaCustomerValidator生成名為ScalaCustomerValidator $的類。 ScalaCustomerValidator $實際上實現了ConstraintValidator,無法引用它的類。 如果您嘗試使用Scala:
val cl = classOf[ScalaCustomerValidator]
您也會收到編譯錯誤。
該問題仍然存在: https : //issues.scala-lang.org/i#browse/SI-2453
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.