我希望能够访问以下其他网址:
第一个网址正常。我使用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生成器应用程序。
答案 0 :(得分:3)
找到答案。将美元符号放在角色类中就可以了。
@GET
@Path("{count : [$]count(/)?}")
@Produces("text/plain")
public String getClichedMessageCount(
@PathParam("count") String count) {
return "Hello count";
}
以上网址与以下网址相符。
答案 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);
}