使用Jersey实现的JAX-RS中的POST请求的Bean验证

时间:2013-04-16 20:52:40

标签: validation http jersey jax-rs

我正在使用针对JAX-RS的Jersey实现,我正在寻找一个可以在POST请求中使用Bean验证的示例。我有这个操作,例如:

@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等)。我看到了这个doc,他们正在使用Seam Framework来做到这一点。

目前,我正在尝试使用javax.validation实施来验证我的请求,但它无效。

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

TNKS。

2 个答案:

答案 0 :(得分:2)

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

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

因为JSR-303旨在处理bean而不是参数集合,所以当你尝试将它弯曲到你的意愿时它会变得非常冗长。

恕我直言最好不要在你的班级中保持验证,要么使用管道和过滤器模式,即ContainerRequestFilter,要么像@Willy建议的那样使用AspectJ之类的东西。

答案 1 :(得分:2)