我遇到了Jersey @Path的问题,我希望为我的系统实现一个沙箱环境。基本上通过给定的URL禁用或启用沙箱模式,如下所示:
沙盒网站
GET:../ MyProject / sandbox / data
常规网站
GET:../ MyProject / data
我可以使用连接到项目根类的Path的正则表达式。
@Path("/{mode:sandbox|}")
public class JerseyResource{
boolean isSandbox = false;
public JerseyResource(@PathParam("mode") String mode) {
if(mode.equals("sandbox"))
isSandbox = true;
}
@GET
@Path("data")
@Produces(MediaType.TEXT_PLAIN)
public Response data() {
if(isSandbox)
return Response.ok("Sandbox is on").build();
return Response.ok("Sandbox is off").build();
}
}
可以尝试“GET:../ MyProject /sandbox / data”并返回“Sandbox is on”。 但当我“GET:../ MyProject / data”时,它只返回我找不到的404页面。
这里是否有办法在路径网址中使用空字符串作为泽西的参数,同时采用固定字符串?
答案 0 :(得分:0)
尝试使用:
@Path("{mode:(/sandbox)?}")
您还需要将模式比较更改为:
if (mode.endsWith("sandbox"))
isSandbox = true;
和您的数据资源:
@Path("/data")
答案 1 :(得分:0)
我通过编辑web.xml文件找到了解决方案!
<servlet-mapping>
<servlet-name>myProject</servlet-name>
<url-pattern>/sandbox/*</url-pattern>
<url-pattern>/*</url-pattern>
</servlet-mapping>
这允许我有多个url指向同一个项目,并在代码中写:
@Path("")
public class JerseyResource{
boolean isSandbox = false;
public JerseyResource(@Context HttpServletRequest req) {
if(req.getRequestURI().startsWith("/nexus/sandbox"))
isSandbox = true;
}
这对我来说非常合适,它允许有一个空类Path,也允许子路径。