Jersey是否支持美元符号JAX-RS的Path注释?

时间:2012-01-09 17:32:07

标签: java regex jersey jax-rs

我希望能够访问以下其他网址:

第一个网址正常。我使用Jersey实现的JAX-RS来处理$ count URL。

以下是资源的代码。

@Path("/helloworld")
public class HelloWorldResource {
    @GET
    @Produces("text/plain")
    public String getClichedMessage() {
        return "Hello World!";
    }

    @GET
    @Path("\\$count")
    @Produces("text/plain")
    public String getClichedMessage(
            @PathParam("\\$count") String count) {

        return "Hello count";
    }
}

我也试过" $ count"在@Path和@PathParam中,但是也没有。

注意:如果我从上面的所有代码中删除美元符号,那么它适用于URL localhost:9998 / helloworld / count。但是我需要在URL中存在美元符号,因为这将是一个OData生成器应用程序。

4 个答案:

答案 0 :(得分:3)

找到答案。将美元符号放在角色类中就可以了。

@GET
@Path("{count : [$]count(/)?}")
@Produces("text/plain")
public String getClichedMessageCount(
        @PathParam("count") String count) {

    return "Hello count";
}

以上网址与以下网址相符。

  • 本地主机:9998 /的HelloWorld / $计数
  • 本地主机:9998 /的HelloWorld / $计数/
  • 本地主机:9998 /的HelloWorld / $ $计数滤波器=嗒嗒
  • 本地主机:9998 /的HelloWorld / $计数/ $滤波器=嗒嗒

答案 1 :(得分:1)

美元符号是URL中的特殊字符,需要进行编码,我担心:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

你正在寻找的角色是%24,如果你感兴趣的话,不过如果你在java中,阅读java.net.URI课可能是值得的。我没有和泽西一起打球,但是Java在这里能够为你做出努力。

答案 2 :(得分:0)

你在@Path

中使用了错误的斜杠
@GET
@Path("/$count")
@Produces("text/plain")
public String getClichedMessage(
        @PathParam("\\$count") String count) {

    return "Hello count";
}

这也不是使用PathParam的正确方法。如果您在/ helloworld之后尝试检索值,则应执行以下操作

@GET
@Path("/{$count}")
@Produces("text/plain")
public String getClichedMessage(
        @PathParam("$count") String count) {

    return "Hello count";
}

编辑  无法使用$

来使用它
@Path("count") // works
@Path("/count") // works
@Path("\\count") // does not work
@Path("$count") // does not work
@Path("/$count") // does not work

答案 3 :(得分:0)

问题已经解决了很长时间,但这也许会帮助将来寻找类似问题的人。

我们发现解决此问题的方法是编写一个类,该类将编码符号替换为美元符号本身。我们在RestEasyClient中注册了该课程。

public class LoggingFilter implements ClientRequestFilter{

@Override
public void filter(ClientRequestContext context) throws IOException {
   //replace uri in context...
   String uri = context.getUri();
   //regex to replace $ sign in uri
   //set new uri in context so request goes to correct url
   context.setUri(uri);
}