raf*_*ira 23 java regex rest jersey
我在REST项目中使用Jersey,我需要使用正则表达式.
挖掘它很简单,如:
@Path("/resources")
public class MyResource {
@GET
@Path("{subResources:.*}")
public String get(@PathParam("subResources") String subResources) {...}
}
Run Code Online (Sandbox Code Playgroud)
但是,这样做,只有当我传递1个参数时,该方法才会获取请求,例如:
GET:.../resources/firstSubResource
如果我使用多于1个参数,则该方法无法获取请求,例如:
GET:.../resources/firstSubResource/seccondSubResource/thirdSubResource
如果我的@Path包含变量或文本值,我只能使用正则表达式,例如:
@Path("{SubResource1}/{subResources:.*}")
Run Code Online (Sandbox Code Playgroud)
要么
@Path("/hardCodeString/{subResources:.*}")
Run Code Online (Sandbox Code Playgroud)
今天我可以运行这个变量的解决方案,但对于我的观点来说并不是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>
(...)
Run Code Online (Sandbox Code Playgroud)
题
问候
jag*_*aga 21
您可以尝试使用JAX-RS 1.1概述中给出的正则表达式
对于您的案例,代码段如下所示
@Path("resources/")
public class MyResource {
@GET
@Path("{subResources: [a-zA-Z0-9_/]+}")
public String get(@PathParam("subResources") String subResources) {...}
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
我知道这是一个非常古老的问题,但我在尝试为自己寻找解决方案时遇到过它.我试图接受s3样式的文件名,例如/folder/whatever/blah/.../image.jpg,它可以是任何可以想象的长度并且包含许多/s.
无论如何你自己的解决方案
@Path("/hardCodeString/{subResources:.*}")
Run Code Online (Sandbox Code Playgroud)
给我一个想法......结果证明这是有效的:
@Path("/{subResources:.*}")
Run Code Online (Sandbox Code Playgroud)
注意最初的/.现在也许在三年内,这是他们已经修复或其他什么,但我希望这有助于某人,因为这个页面似乎是提到这种困境的唯一地方.
你可以尝试删除你的@PathParam注释,而是通过UriInfo获取路径:
@Context UriInfo uriInfo;
@GET
@Path("{subResources:.*}")
public String get()
{
String path = uriInfo.getPath();
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但它适用于我的应用程序.
您是否会反对接受单个 PathParam(代表由某个标记分隔的子资源集合)?
例如 ...
@Path("/资源)
公共类我的资源{
@得到
@Path("{子资源}")
公共字符串 get(@PathParam("subResources") String subResources)
{
String[] params = StringUtils.split(subResources, ";");
}
}
..应该处理
获取:.../resources/firstSubResource & GET: .../resources/firstSubResource;seccondSubResource;thirdSubResource
| 归档时间: |
|
| 查看次数: |
53731 次 |
| 最近记录: |