【问题标题】:@Path with regexp not working as advertised带有正则表达式的@Path 没有像宣传的那样工作
【发布时间】:2014-03-04 18:12:12
【问题描述】:

我正在尝试在我的 REST API(我使用的是 Resteasy 3.0.2)中构建一个端点,它可以在 /catalog/foo/dump 或 /catalog/dump 上回答。根据 Resteasy 文档,这应该可行:

@Path("/catalog)
public class MyResource {

   @GET
   @Path("{var:.*}/dump")
   public String dump() {...}
}

您可以在手册中查看此示例:http://docs.jboss.org/resteasy/docs/3.0.2.Final/userguide/html/Using_Path.html

不过,我没有看到预期的行为。只有 /catalog/(something)/dump 按预期响应。 /catalog/dump 抛出以下内容:

javax.ws.rs.NotAllowedException: No resource method found for GET, return 405 with Allow header
at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:370)
at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:113)
at org.jboss.resteasy.core.registry.RootNode.match(RootNode.java:43)
at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48)
at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:444)
at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:234)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:171)
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

我在这里做错了什么?

【问题讨论】:

  • 您是否尝试过在 SegmentNode.java 中进行调试以查看发生了什么?

标签: java rest resteasy


【解决方案1】:

我会做两种方法:

@GET
@Path("/dump")
public String dump1() {
  return dump("");
}

@GET
@Path("/{var:.*}/dump")
public String dump2(@PathParam("var") String var) {
  dump(var);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2018-08-24
    • 2018-07-10
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多