自定义 RESTEasy-验证

问题描述

我喜欢为 Get-Paramter 引入数字检查/constraintValidator。 它应该看起来像:

@GET
@Path("/{docId}")
@IsNumeric
public SomeThing getSomeThing(@PathParam("docId") String docId) {
    return ...;
}

我不知道如何实现它。应该验证 docId 并且当 docId 不是数字时应该返回 BadRequest。

解决方法

您无需为此进行任何验证。 JAX-RS 允许您在 @Path 表达式中使用正则表达式。所以你可以只使用 @Path("{docId: \\d+}")。但这不会导致 400 Bad Request。相反,如果不匹配,您将收到 404。不过这应该就是你想要的。如果它是一个错误的路径元素,那么它应该是 404,因为找不到 URI(路径)。

但是,如果您真的,真的想要进行验证(并获得 400),RESTEasy 也有 Bean Validation 支持。请不要使用这个。遵循良好的 REST 实践。

,

保罗的解决方案很优雅

如果你想验证方法参数,你可以这样做:

@GET
@Path("/{docId}")
public SomeThing getSomeThing(@IsNumeric @PathParam("docId") String docId) {
   return ...;
}