gpt4 book ai didi

rest - Tomcat,JAX-RS, Jersey ,@PathParam : how to pass dots and slashes?

转载 作者:行者123 更新时间:2023-12-03 20:10:37 25 4
gpt4 key购买 nike

有这样的方法:

@GET @Path("/name/{name}")
@Produces(MediaType.TEXT_PLAIN)
public String getProperty(@PathParam("name") String name) {
System.out.println(name);
}

如何传递像“test./test”这样的值?
/name/test./test     gives HTTP 404
/name/test.%2Ftest gives HTTP 400
/name/test.%252Ftest prints test%2Ftest

但如果我这样做 name = URLDecoder.decode(name);它打印 /testtest. 的第一部分消失。

已经有一两个这样的问题了,但它们很旧,没有找到好的解决方案,我想我会再问一次。

最佳答案

@Path中的图案annotation 在内部变成了一个正则表达式,默认情况下模板部分只匹配选定的字符。特别是,它们通常不匹配 /人物;这几乎总是正确的做法(因为它可以让您将模板放在路径的一部分),但在这种情况下,您并不想使用整个后续路径。为了获得一切,我们必须覆盖该特定模板的正则表达式片段;这实际上很容易,因为我们只是在模板片段中放入了 :然后是我们要使用的 RE:

@GET @Produces(MediaType.TEXT_PLAIN)
@Path("/name/{name:.+}")
public String getProperty(@PathParam("name") String name) {
return name;
}

这将匹配 /name/ 之后的所有字符(最多但不包括任何 ? 查询部分)但只有在那里有东西时才会匹配。请注意,如果您有任何其他 @Path("/name/...")事情,事情会变得非常困惑!所以不要那样做。

关于rest - Tomcat,JAX-RS, Jersey ,@PathParam : how to pass dots and slashes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11130793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com