java - 带有 spring mvc 的 scala 中的 JSR 303 ConstraintValidator

标签 java scala spring-mvc bean-validation

我有混合 scala-java spring-boot mvc 项目。我正在尝试使用 javax.validation.ConstraintValidator 为请求 bean 实现自定义 validator
我在这里和其他帖子中读到,最好用 Java 编写注释 Does scala suport JSR-303 validation?

我在 Java 中编写了自定义 Constraint 注释,在 scala 中编写了 ConstraintValidator 类,但是当我指定 @Constraint(validatedBy = ScalaCustomerValidator.class) 时,它会给出编译错误 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的scala定义

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

关于java - 带有 spring mvc 的 scala 中的 JSR 303 ConstraintValidator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33266551/

相关文章:

json - 在scala中使用spray编写一个简单的json REST服务器

spring - 使用 Spring Data REST 公开枚举

spring - @RequestBody 和 @RequestParam 有什么区别?

java - Spring AOP 命名切入点到底是如何工作的?有何用途?

scala - 如何在 Spark/Scala 中使用窗口函数使用 countDistinct?

java - Spring Boot + Flyway + AWS : Caused by: java. sql.SQLException:找不到合适的驱动程序

java - Liferay:将自定义变量从 portlet 放入主题中

java - 如何处理: SQL Error: 0, SQLState : 08006 and 08003?

Scala:我可以将选项转换为可变参数吗?

java - xpath 第一个可用值