bra*_*ter 5 java jax-rs bean-validation apache-wink
是否可以在JAX-RS资源上有效使用JSR303(Bean Validation)注释?
例如,如果我有一个资源成员,我注释了@NotEmpty,如果不满足此约束,则会向客户端生成错误?
这似乎是显而易见的事情,但也乐于被告知更好的方式(我不想将验证移到ORM /数据库级别)
您真的是指验证资源成员吗?通常,资源成员以这种或另一种方式注入(它是上下文、实体或路径/查询/矩阵参数),只要 JAX-RS 框架正常工作,您就会正确注入这些成员。
我个人认为验证实体更有意义,因为它是通过线路到达的,由 MessageBodyReader 填充,基本上您不知道里面有什么,对吧?
因此,如果您决定验证实体,可以采取多种方法:
AFAIK,Apache Wink 不支持内置验证。您可以实现一个处理程序。看DeploymentConfiguration.initRequestHandlersChain()。它支持添加用户处理程序。在您的处理程序中,您可以执行任何验证。我什至认为,如果您贡献这段代码,Wink 社区将会很高兴。
这种方法的唯一问题是 - 它绑定到 Apache Wink。如果您决定迁移到不同的 JAX-RS 框架,它将不起作用。
另一种方法是在您自己的MessageBodyReader. 您需要做的就是为您的实体注册一个特殊的读取器并验证内部的实体。您仍然可以通过使用@Context Providers.getMessageBodyReader(). 这种方法的优点在于它是标准的 JAX-RS。糟糕的是,您将 MessageBodyReaders 用于其设计目的之外的用途。
最简单的方法是验证每个资源方法第一行中的实体。它会产生一些代码重复,但有时简单会获胜。
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |