簡體   English   中英

使用Spring MVC在Scala中的JSR 303 ConstraintValidator

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM