java - java - 如何从Java Jersey + Dropwizard中的给定路径反向查找资源?
问题描述
如果给定了一个相对路径(例如path = "/foo/1/bar"
),我如何找出将使用哪个资源的方法来处理请求(这将是FooResource.bar
当前示例中的方法)?
我试图通过查看所有带@Path
注释的类和方法来使用反射,并构建一个映射以指向这些方法。但是,这并不理想,因为我必须针对所有现有@Path
的 s 测试给定的相对路径。
这是一个示例资源:
@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
上面代码段中定义的 ?
解决方案
通过使用 Dropwizard 提供的过滤器找到了答案。
public void filter(ContainerRequestContext requestContext) {
UriRoutingContext routingContext = (UriRoutingContext) requestContext.getUriInfo();
ResourceMethodInvoker invoker = (ResourceMethodInvoker) routingContext.getInflector();
Class<?> className = invoker.getResourceClass();
Method methodName = invoker.getResourceMethod();
}
从这篇文章中找到答案:如何在 ContainerRequestFilter 中检索请求的匹配资源
推荐阅读
- c# - 在启动 C# .Net 5 MacOS 时启动程序
- python - Polar 等高线 2 的问题
- python - 如何从响应中获取 xml 内容并将其作为 Python 中的帖子发送回
- python - python3.7 install on mac not recognized in terminal
- oracle - 将数据插入表单 oracle apex
- java - 错误:无法访问 jarfile auth-api.jar - SpringBoot
- python - 按空格键暂停和恢复python中的循环
- c++ - 只要另一个对象存在,如何使一个对象保持活动状态?
- java - Spring Boot - 使用 TestRestTemplate 在 testi 期间类的空字段
- html - 能
在里面 ?