我正在尝试实现 ContainerRequestFilter
对请求的参数进行自定义验证。我需要查找将与 URI 匹配的资源方法,以便我可以从方法的参数中抓取自定义注释。
基于 this answer我应该可以注入(inject) ExtendedUriInfo
然后用它来匹配方法:
public final class MyRequestFilter implements ContainerRequestFilter {
@Context private ExtendedUriInfo uriInfo;
@Override
public ContainerRequest filter(ContainerRequest containerRequest) {
System.out.println(uriInfo.getMatchedMethod());
return containerRequest;
}
}
但是getMatchedMethod
显然返回 null
,一直到实际调用该方法(此时我进行验证为时已晚)。
在调用资源方法之前,如何检索将与给定 URI 匹配的 Method
?
对于那些感兴趣的人,我正在尝试滚动我自己的必需参数验证,如 JERSEY-351 中所述.
最佳答案
实际上,您应该尝试将 ResourceInfo
注入(inject)到您的自定义请求过滤器中。我已经用 RESTEasy 试过了,它在那里工作。优点是您针对 JSR 接口(interface)而不是 Jersey 实现进行编码。
public class MyFilter implements ContainerRequestFilter
{
@Context
private ResourceInfo resourceInfo;
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException
{
Method theMethod = resourceInfo.getResourceMethod();
return;
}
}
关于java - 如何在 Jersey 调用之前获取与 URI 匹配的资源方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303694/