我注意到来自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/

10-11 04:49