我认为这是不可能的,但是在扔掉它之前我需要确认......
我有一个带有这种模式的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 - 也不起作用。同样的错误。
我知道传递它作为查询参数将起作用。但我想知道是否有办法让它作为一个路径参数使用它?
谢谢!
答案 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.
}