@Path和正则表达式(泽西岛/REST)

2022-09-01 20:41:33

我在REST项目中使用泽西岛,我需要使用正则表达式

挖掘它很简单,就像:

@Path("/resources")
public class MyResource {

   @GET
   @Path("{subResources:.*}")
   public String get(@PathParam("subResources") String subResources) {...}
}

但是,这样做,只有当我传递1个参数时,该方法才会获得请求,例如:

GET: .../resources/firstSubResource

如果我使用超过1个参数,则该方法收到请求,例如:

GET: .../resources/firstSubResource/seccondSubResource/threeSubResource


我只能在@Path包含变量文本值时使用正则表达式,例如:

@Path("{SubResource1}/{subResources:.*}")

@Path("/hardCodeString/{subResources:.*}")

今天,我可以运行这个变量解决方案,但对于我的观点来说不是ok。


我的网站.xml

(...)
    <servlet>
        <servlet-name>Jersey Spring Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.myproject.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Spring Web Application</servlet-name>
        <url-pattern>/1.0/*</url-pattern>
    </servlet-mapping>
(...)

问题

  • 有没有人做过相关的事情?
  • 我做错了什么?
  • 我认为这可能是一个错误,当使用多个@Path,一个在类中,另一个在方法中。
  • 任何提示都是值得赞赏的!

问候


答案 1

您可以尝试使用 JAX-RS 1.1 概述中给出的正则表达式吗?

代码片段将如下所示

@Path("resources/")
public class MyResource {

   @GET
   @Path("{subResources: [a-zA-Z0-9_/]+}")
   public String get(@PathParam("subResources") String subResources) {...}
}

希望有所帮助。


答案 2

我知道这是一个非常古老的问题,但我只是在试图为自己寻找解决方案时遇到了它。我试图接受s3样式的文件名,例如/folder/whatever/blah/.../image.jpg可以是任何可以想象的长度并包含许多s。/

无论如何,你自己的解决方案:

@Path("/hardCodeString/{subResources:.*}")

给了我一个想法...事实证明,这是有效的:

@Path("/{subResources:.*}")

请注意首字母 .现在也许在三年后,这是他们已经修复的东西,但我希望这对某人有所帮助,因为这个页面似乎是唯一提到这种困境的地方。/