【问题标题】:Jersey's path match "sandbox" or empty stringJersey 的路径匹配“沙盒”或空字符串
【发布时间】:2012-09-21 12:58:16
【问题描述】:

我在使用 Jersey @Path 时遇到问题,我希望在其中为我的系统实施沙盒环境。基本上通过给定的 url 禁用或启用沙盒模式,如下所示:

沙盒网站

GET:../MyProject/sandbox/data

常规站点

获取:../MyProject/数据

我想在哪里使用正则表达式连接到我的项目根类的路径。

@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 页面。

这里有没有办法在 Jersey 中使用空字符串作为路径 url 作为参数,同时采用固定字符串?

【问题讨论】:

    标签: java regex path jersey jax-rs


    【解决方案1】:

    尝试使用:

    @Path("{mode:(/sandbox)?}")
    

    您还需要将模式比较更改为:

    if (mode.endsWith("sandbox"))
        isSandbox = true;
    

    和您的数据资源:

    @Path("/data")
    

    【讨论】:

    • 我必须删除破折号“/”才能使其正常工作,但我仍然没有得到“沙盒已关闭”,只有“...开启”。仍然有同样的问题。在 url 上附加一个子路径作为“/data”似乎是一个问题。
    【解决方案2】:

    我通过编辑 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;
        }
    

    这对我来说非常有效,它允许有一个空的类路径,也允许子路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      相关资源
      最近更新 更多