scala是否支持JSR-303验证?
如果确实 - 你能写一个例子吗?
如果不是 - 是否有在scala类上运行JSR-303验证的解决方法?
答案 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类型以及集合的自定义处理需要自定义注释。
如果有兴趣,我将开源实施。