4

我正在为 JAX-RS 使用 Jersey 实现,并且我正在寻找一个可以在 POST 申请中使用 Bean Validation 的示例。我有这个操作,例如:

@POST
@Path("document/annotations/save")
@Produces("application/json")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Map<String, Object> saveAnnotation(
        @FormParam("user") String userStr,
        @FormParam("documentId") String documentId,
        @FormParam("documentPage") Integer documentPage,
        @FormParam("annotationContent") String annotationContent,
        @FormParam("annotationId") Long annotationId,
        @FormParam("isMobile") Boolean isMobile) { // the code... }

我想为每个方法参数使用验证约束(@NotNull@Pattern等)。我看到了这个文档,他们使用 Seam 框架来做到这一点。

目前,我正在尝试使用该javax.validation实现来验证我的请求,但它不起作用。

有没有办法将 JSR-303 规范与 JAX-RS 一起使用?

坦克。

4

2 回答 2

2

目前使用泽西岛是不可能的;一种可能的替代方法是编写客户资源过滤器并绑定到@NotNull等注释。

如果将其封装在资源类中会更简单,因为您可以绑定到@Valid方法上的注释并一次性验证 bean。

因为 JSR-303 旨在处理 bean 而不是参数集合,所以当您尝试按照自己的意愿弯曲它时,它最终会变得非常冗长。

恕我直言,最好不要将验证保留在您的类中,而是使用管道和过滤器模式,即ContainerRequestFilter,或者像@Willy 建议的那样使用 AspectJ 之类的东西。

于 2013-04-17T08:16:13.063 回答
2

这是可能的。查看最新泽西岛的文档

https://jersey.java.net/documentation/latest/bean-validation.html#d0e9380

https://jersey.java.net/documentation/latest/bean-validation.html

于 2013-09-10T18:51:53.653 回答