如果给了我一个相对路径(例如path = "/foo/1/bar"
),如何找出将使用哪种资源的方法来处理请求(在当前示例中为FooResource.bar
方法)?
我尝试通过查看所有@Path
带注释的类和方法来使用反射,并构建一个指向这些方法的映射。但是,这并不理想,因为我必须针对所有现有的@Path
测试给定的相对路径。
以下是示例资源:
@Path("/foo")
public class FooResource {
@GET
@Path("{id}/bar")
public String bar(@PathParam("id") int barId)
{
return "Hello Bar " + Integer(barId).toString();
}
@POST
@Path("/biz")
public String biz(BisRequest biz)
{
return "Hello Biz";
}
}
代替我当前的解决方案是
mapper = new HashMap<String, Method>();
/** content of mapper
String "/foo/{id}/bar" -> java.lang.reflect.Method FooResource.bar
String "/foo/biz" -> java.lang.reflect.Method FooResource.biz
*/
public Method findResourceMethodForPath(String path, HashMap<String, Method> mapper) {
String correctKey = findCorrectKeyForPath(path, mapper.keySet());
return mapper.get(correctKey);
}
是否有一种更清洁的方法来实现findResourceMethodForPath
而不必使用上面的代码段中定义的mapper
?
答案 0 :(得分:0)
通过使用Dropwizard提供的过滤器找到了答案。
public void filter(ContainerRequestContext requestContext) {
UriRoutingContext routingContext = (UriRoutingContext) requestContext.getUriInfo();
ResourceMethodInvoker invoker = (ResourceMethodInvoker) routingContext.getInflector();
Class<?> className = invoker.getResourceClass();
Method methodName = invoker.getResourceMethod();
}
此帖子的答案:How to retrieve matched resources of a request in a ContainerRequestFilter