【问题标题】:Does scala suport JSR-303 validation?scala 是否支持 JSR-303 验证?
【发布时间】:2014-06-18 11:40:31
【问题描述】:

scala 是否支持 JSR-303 验证?

如果是的话 - 你能写一个例子吗?

如果没有 - 是否有在 scala 类上运行 JSR-303 验证的变通方法?

【问题讨论】:

  • 我找到了Accord 用于验证的开源库。

标签: scala bean-validation


【解决方案1】:

当然!

然而,Scala 类型需要自定义注解,以及对集合的自定义处理。

如果有兴趣,我会开源我的实现。

【讨论】:

    【解决方案2】:

    有好消息也有坏消息。

    好消息是您可以毫无问题地在 Scala 代码中使用 JSR-303 注释。

    这是我之前项目中的一个示例,其中所有注释都是 JSR-303 注释,其中一些是开箱即用的,其中一些是自定义的。

    @MessagesValid
    class Messages {
      @NotEmpty @Valid
      private var msgs: java.util.List[DeliveredMessage] = _  
      def messages = msgs.asScala
    
      @ChannelValid 
      var channel: String = _
    
      var emailFrom: String = _
      var emailReplyTo: String = _
    
      @PublishAtValid
      var publishAt: String = _
    }
    

    请注意msgs 集合如何是java.util.List。它必须是一个 Java 集合,@NotEmpty@Valid 才能工作。但是使用 JavaConverters 将该字段公开为 Scala 集合很容易。

    坏消息是您无法使用 Scala 创建 JSR-303 注释。您必须使用 Java 编写这些注释。因此,如果您想编写自定义 JSR-303 注释,则需要有一个混合的 Scala/Java 项目。

    There is an old bug(错误 #32!)在 Scala 错误跟踪器中支持这些类型的注释,但它目前因无法修复而关闭。无论如何,请投票。

    【讨论】:

    • 我在 Java 中编写了自定义 Constraint 注释,在 scala 中编写了 ConstraintValidator,但是当我指定 @Constraint(validatedBy = ScalaCustomerValidator.class) 时,它给出了 Type mismatch: cannot convert from Class<ScalaCustomerValidator> to Class<? extends ConstraintValidator<?,?>>[] 的编译错误。我的 ScalaCustomerValidator 确实扩展了 ConstraintValidator
    • @sourcedelica 您能否提供使用此类注释所需的依赖项?
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2011-10-30
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多