我注意到来自javax.ws.rs.QueryParam的@QueryParam批注中有一个奇怪的行为;
参考下面的代码片段,当我将URL设置为以下内容时:
http://host:port/services/serv123?test=OK
我可以按预期检索“测试”的值。
但是,当我将网址设置为类似以下内容时:
http://host:port/services/serv123#top?test=OK
@QueryParam(“ test”)返回null。
这是我正在使用的代码。每个注释都显式导入。
@Path("/services")
public class Services {
[...]
@GET
@Path("/{srvID}")
@Produces(MediaType.TEXT_HTML)
public ServicesView getServiceDetailPage(@PathParam("srvID") String srvId,
@QueryParam("test") String test) {
[...]
return new ServicesView([...]);
}
[...]
}
我已经在Dropwizard 0.9.1(包括Jersey)中对此进行了测试
请注意:
我对行为的解释感兴趣,而不是解决方法(我已经有几对了,如果有人感兴趣,可以发布它们)。
据我所知,
http://host:port/services/serv123#top?test=OK
是一个完全合法的URL,@ QueryParam应该能够处理它(我很高兴被证明是错误的,只是解释为什么它不是合法的URL)。为了进行测试,我尝试将%2%3F也编码为#,但是正如预期的那样,它没有用。
我想念什么?
最佳答案
代替
http://host:port/services/serv123#top?test=OK
采用
http://host:port/services/serv123?test=OK#top
如果希望
?test=OK
作为查询参数而不是锚点的一部分。关于java - @QueryParam不分析 anchor ('#')后的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34911484/