scala是否支持JSR-303验证?

时间:2014-06-18 11:40:32

标签: scala bean-validation

scala是否支持JSR-303验证?

如果确实 - 你能写一个例子吗?

如果不是 - 是否有在scala类上运行JSR-303验证的解决方法?

2 个答案:

答案 0 :(得分:5)

有好消息和坏消息。

好消息是您可以在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的方式。它必须是@NotEmpty@Valid的Java集合才能工作。但是使用JavaConverters将该字段公开为Scala集合很容易。

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

Scala错误跟踪器中的

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

答案 1 :(得分:0)

当然!

但是,Scala类型以及集合的自定义处理需要自定义注释。

如果有兴趣,我将开源实施。