Java Jax-rs正则表达式路径
我有这个Jax-rs服务接口:Java Jax-rs正则表达式路径,java,regex,google-app-engine,jax-rs,resteasy,Java,Regex,Google App Engine,Jax Rs,Resteasy,我有这个Jax-rs服务接口: @GET @Path("{id: ^((?!_ah).)*$}") @Produces(MediaType.TEXT_HTML) public Response getStuff(@PathParam("id") String id, @Context HttpHeaders headers, @Context UriInfo uriInfo, @Context SecurityContext securityContext); 此接口的
@GET
@Path("{id: ^((?!_ah).)*$}")
@Produces(MediaType.TEXT_HTML)
public Response getStuff(@PathParam("id") String id, @Context HttpHeaders headers,
@Context UriInfo uriInfo, @Context SecurityContext securityContext);
此接口的目标是捕获除以下字符外的所有字符序列:
_ah/foo
_ah/foo/bar
或者任何以\u ah
我试过正则表达式:
从表面上看,它的效果与预期相符。然而,我现在的问题是,当我访问一个被假定为绕过的路径时,我会得到以下结果:
Could not find resource for relative : /_ah/admin of full path: http://127.0.0.1:8888/_ah/admin
我的应用程序在GAE上运行,因此在开发模式下运行时,此路径用于SDK运行时的管理servlet
s
我错过了什么?当@Path过滤器不匹配时,它不是会绕过它吗?那么为什么我会遇到找不到资源的问题呢
如果我不放置:@Path({id:^((?!\u-ah)。*$})
路径下的servlet工作正常。是不是\u ah
路径已经被绕过,应该可以再次访问 我在将RestEasy升级到3.0.10时遇到了这个问题。我有一个@Path({id})和@Path(“jobs”)冲突,它来自遗留代码。由于有第三方应用程序,我无法在不经过漫长过程的情况下更改rest端点。幸运的是,regex解决方案对我来说确实有效。虽然我不能说为什么它不适用于原始海报
这让我头痛了好几天,我想知道我的问题在哪里,以及如何解决它。如果您处于类似的情况,并且更改rest端点不是一个可行的选择,我也会这样做
原始类别:
@Path("device")
public class DeviceApi
{
@PUT
@Path("{id}")
public Device deviceAction(..., Device device) {...}
}
冲突的正则表达式类:
@Path("device")
public class JobsDeviceApi
{
@PUT
@Path("jobs")
public void moveJobs(..., Jobs jobs)
}
修改后的DeviceApi类可以工作:
@Path("device")
public class DeviceApi
{
@PUT
@Path("{id: ^(jobs)}")
public Device deviceAction(..., Device device) {...}
}
很明显,你可以把任何你想要的正则表达式放进去。我只需要它忽略单一路径,所以我使用了KISS原则(保持简单愚蠢)。你所说的“*如果我不做:@path({id:^((?!\u ah.))*$}”)
*?去掉方法或注释?另外,你的正则表达式是不正确的。^((?!\u ah)。*$
也将与另一个地方不匹配“
。你应该使用^(?!\u ah)。*$
。好的,我知道了,谢谢,但即使使用了正确的正则表达式,我仍然会得到“找不到相对资源”是的,但你没有澄清。你说“如果我不放:@Path({id:^((?!\u-ah)。*$}”)
路径下的servlet工作正常。”。什么是“不要放”?是否删除@Path
注释?删除该方法?