在RESTEasy应用程序中,我需要在运行时确定特定资源方法是否可以根据路径/查询参数处理某个路径。如果无法处理,我希望请求回退到其他方法。 E.g:
@Path("/")
class MyResource {
@GET
@Path("{path : .*}")
public Response handleRedirects(@PathParam("path") String path) {
if (hasRedirectFor(path)) {
return redirectTo(path);
}
else {
//somehow pretend that this method didn't exist and fallback to the next best match
}
}
@GET
@Path("img/{image}")
public Response handleImage(@PathParam("image") String someParam) {
return createImageResponse(image);
}
@GET
@Path("{template : .*\\.html}")
public Response handleTemplate(@PathParam("template") String template) {
return createTemplateResponse(template);
}
}
这是否可行,而不必使用RequestFilter
? (我不想使用RequestFilter
,因此我需要自己实现handleSometimes
的网址匹配。
编辑:请求提供更多详细信息的评论,因此我更改了示例以更接近我的现实世界情况。我有一个处理各种请求的典型网络服务器,在上面的示例中,我将其简化为图像和模板。由于遗留原因,有一些从第三方到不存在(或不再存在)但我们不想破解的网址的传入链接。因此,我们希望在这些URL上提供重定向,这是handleRedirects
函数应该执行的操作。
遗憾的是,遗留和支持网址的模式存在重叠,这使我无法编写@Path
注释以静态路由到正确的方法。此外,我只知道我是否真的可以从遗产中生成重定向 - >当我在运行时检查路径时,如果失败,我想回到其他方法。因此,我希望能够在方法本身中确定是否可以处理请求,并且如果不能,则让RESTEasy回退到下一个匹配的资源。通常这是过滤器会派上用场的东西,但后来我失去了自动提取路径参数或路由到不同方法的能力,我真的很想保留。