scala是否支持JSR-303验证?
如果它是 -你能写一个例子吗?
如果没有 -是否有在scala类上运行JSR-303验证的解决方案?
有好消息也有坏消息
好消息是,您可以在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 bug跟踪器中有一个老bug (bug #32!)支持这些类型的注释,但目前它被关闭为不会修复。无论如何,请投赞成票。
当然!
然而,Scala类型需要自定义注解,以及自定义集合处理。
如果有兴趣,我将开源我的实现。