我在 REST 项目中使用 Jersey ,我需要使用正则表达式。
挖掘它很简单:
@Path("/resources")
public class MyResource {
@GET
@Path("{subResources:.*}")
public String get(@PathParam("subResources") String subResources) {...}
}
但是,这样做,如果我通过1个参数,该方法只能获取 请求,例如:
获取:... / resources / firstSubResource
如果我使用多于1个参数,方法不获取请求,例如:
获取:... / resources / firstSubResource / seccondSubResource / thirdSubResource
如果我的@Path包含变量或文本值,我只能使用正则表达式,例如:
@Path("{SubResource1}/{subResources:.*}")
或者
@Path("/hardCodeString/{subResources:.*}")
今天我可以运行这个变量的解决方案,但对于我的观点来说并不是oK。
我的web.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>
(...)
问题
此致
答案 0 :(得分:21)
您可以尝试使用Overview of JAX-RS 1.1
中给出的正则表达式代码段看起来如下所示
@Path("resources/")
public class MyResource {
@GET
@Path("{subResources: [a-zA-Z0-9_/]+}")
public String get(@PathParam("subResources") String subResources) {...}
}
希望有所帮助。
答案 1 :(得分:8)
我知道这是一个非常古老的问题,但我在尝试为自己寻找解决方案时遇到过它。我试图接受s3样式的文件名,例如/folder/whatever/blah/.../image.jpg,它可以是任何可以想象的长度并且包含许多/
s。
无论如何你自己的解决方案:
@Path("/hardCodeString/{subResources:.*}")
给了我一个想法......结果证明这是有效的:
@Path("/{subResources:.*}")
注意最初的/
。现在也许在三年内,这是他们已经修复的东西或其他什么,但我希望这有助于某人,因为这个页面似乎是提到这种困境的唯一地方。
答案 2 :(得分:6)
您可以尝试删除 @PathParam 注释,而是通过 UriInfo 获取路径:
@Context UriInfo uriInfo;
@GET
@Path("{subResources:.*}")
public String get()
{
String path = uriInfo.getPath();
}
我不知道为什么,但它适用于我的应用程序。
答案 3 :(得分:0)
您是否反对接受单个PathParam,表示由某个令牌分隔的subResource集合?
例如......
@Path("/resources) public class MyResource { @GET @Path("{subResources}") public String get(@PathParam("subResources") String subResources) { String[] params = StringUtils.split(subResources, ";"); } }
..应该处理
GET: .../resources/firstSubResource & GET: .../resources/firstSubResource;seccondSubResource;thirdSubResource