rest url - 将'/'作为路径VALUE

时间:2011-07-11 19:34:50

标签: jersey

我认为这是不可能的,但是在扔掉它之前我需要确认......

我有一个带有这种模式的GET REST端点

/networks/{networkId}/publishers/{publisherId}/ratings

我面临的问题是,publisherId可能在其id中有'/',就像id可能是“opt / foo / bar”(我们无法控制此ID,它是由我们的客户提供给我们的)

所以

/ networks / 68 / publishers / opt / foo / bar / ratings - 显然不起作用,得到一个不错的网址错误。 / networks / 68 / publishers / opt%2ffoo%2fbar / ratings - 也不起作用。同样的错误。

我知道传递它作为查询参数将起作用。但我想知道是否有办法让它作为一个路径参数使用它?

谢谢!

2 个答案:

答案 0 :(得分:2)

URL编码是正确的方法,但看起来你的容器在Jersey收到它之前解码了斜杠。

假设您正在使用Tomcat,您可以尝试说服Tomcat允许编码,请尝试:

tomcat/bin/setenv.bat
set 
CATALINA_OPTS="-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true"

我不知道其他容器是否有类似的问题和设置。

答案 1 :(得分:2)

我没试过这个,但理论上这应该适用于泽西岛:

@Path("/networks/{networkId}/publishers/")
@GET
public String get(@PathParam("networkId") String networkId, @Context UriInfo ui) {
  java.util.List<PathSegment> segments = ui.getPathSegments();
  // Last segment is "ratings", the rest is your publisherId.
}