@QueryParam在锚之后没有解析参数('#')

时间:2016-01-20 22:01:41

标签: java jersey jax-rs dropwizard

我注意到来自javax.ws.rs.QueryParam的@QueryParam注释中有一种奇怪的行为;

参考下面的代码片段,当我将网址设置为:

http://host:port/services/serv123?test=OK

我可以检索' test'如预期的那样。

但是,当我将网址设置为:

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(包括泽西岛)中测试了这个

请注意:

  • 我对行为的解释感兴趣,而不是解决方法(我已经有一对,如果有人有兴趣可以发帖)。
  • 据我所知,http://host:port/services/serv123#top?test=OK是一个完全合法的网址,@ QueryParam应该能够处理它(我很高兴被证明是错误的,只是解释为什么它不是一个合法的网址)。
  • 为了测试,我尝试过编码'#'进入%23%3F,但正如预期的那样,它没有用。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

而不是

http://host:port/services/serv123#top?test=OK

使用

http://host:port/services/serv123?test=OK#top

如果您希望?test=OK成为查询参数而不是锚点的一部分。