用于404的JAXRS资源路径验证消息



当对@Path片段使用regex时,Jersey运行时对不匹配regex模式的资源返回404。是否有一种方法可以自定义此行为并返回400 (BAD_REQUEST)或向响应添加有意义的消息?

@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]}")

如果使用users/1243调用资源,结果是404。我想添加一个关于有效用户名模式的响应消息。我可以将验证移到Restful方法中并进行验证。但这很乏味。我有几十个方法,我需要从所有这些方法中调用验证。

编辑:我正在使用Jersey 1.17,由于应用程序的影响,不能使用Jersey 2.0。

您可以在请求到达API之前使用ContainerRequestFilter来捕获请求,并使用注入的UriInfo来确定是否存在用户路径元素。如果存在,请检查用户名的有效性。

然而,我要指出,我不认为400是一个合理的回答。请求的语法没有问题。

添加到@Eric Stein的响应中,在@Path中使用regex将导致404而没有执行到达过滤器方法。所以验证必须被推入过滤器方法中。为了中止调用并从下面代码中使用的过滤器返回自定义响应。

<>之前 //groovy code class MyCustomFilter implements ContainerRequestFilter { @Override public ContainerRequest filter(ContainerRequest request) { //do the validation for the resource URI and abort flow for errors throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity("Not valid input").build()) ... .. //for success scenarios, return the request with optional customization return request; } } @ResourceFilters(MyCustomFilter) @Path('/users/{userId}/scripts') class MyJaxRsResource { }

最新更新