加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用JSR303验证JAX-RS(Apache Wink)资源?

发布时间:2020-12-14 19:18:18 所属栏目:Java 来源:网络整理
导读:是否可以在JAX-RS资源上有效使用JSR303(Bean Validation)注释? 例如,如果我有一个资源成员,我注释了@NotEmpty,如果不满足此约束,则会向客户端生成错误? 这似乎是显而易见的事情,但也乐于被告知更好的方式(我不想将验证移到ORM /数据库级别) 最佳答案 你真

是否可以在JAX-RS资源上有效使用JSR303(Bean Validation)注释?

例如,如果我有一个资源成员,我注释了@NotEmpty,如果不满足此约束,则会向客户端生成错误?

这似乎是显而易见的事情,但也乐于被告知更好的方式(我不想将验证移到ORM /数据库级别)

最佳答案
你真的是要验证资源成员吗?通常资源成员以这种方式或其他方式注入(它是上下文,实体或路径/查询/矩阵参数),只要JAX-RS框架工作,您就可以正确地注入这些成员.

我个人认为验证实体更有意义,因为它已经通过电线到达,由MessageBodyReader填充,基本上你不知道里面是什么,对吧?

因此,如果您决定验证实体,可以采用以下几种方法:

> AFAIK,Apache Wink不支持内置验证.您可以实现处理程序.请参阅DeploymentConfiguration.initRequestHandlersChain().它支持添加用户处理程序.在您的处理程序中,您可以执行任何验证.我甚至认为如果你贡献这个代码,Wink社区会很高兴.
这种方法唯一的问题 – 它与Apache Wink绑定.如果您决定转移到不同的JAX-RS框架,它将无法工作.
>另一种方法是在您自己的MessageBodyReader中进行此验证.您需要做的就是为您的实体注册一个特殊的阅读器并验证其中的实体.您仍然可以使用@Context Providers.getMessageBodyReader()来利用标准的MessageBodyReaders(如JAXB或Jackson).这种方法的好处在于它是标准的JAX-RS.你使用MessageBodyReaders做他们不想要的东西的坏处.
>最简单的方法是在每个资源方法的第一行验证实体.它会创建一些代码重复,但有时简单获胜.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读