Google AppEngine URL查询字符串参数未传递给Jersey GET处理程序

时间:2012-06-04 07:12:35

标签: java google-app-engine jersey

我已经在Jersey上实施了一个测试方法,可以在我的Google AppEngine本地开发服务器上运行。方法签名是:

@GET
public String sayHello(@QueryParam ("name") String id) 

我在网络浏览器中输入以下网址进行测试:

http://127.0.0.1:8888/sayhello?name=bill

,于是浏览器收到预期的“Hello,bill”响应。

但是,当我将此appengine应用程序部署到云端时,我没有得到预期的响应。该名称回显null为“Hello”。我记录了收到的QueryParam值,日志确认查询参数没有传递给方法。

code.rest.impl.Test sayHello: name QueryParam received is:null

如果我还分配了一个@DefaultParam,则声明的默认参数会替换null值,如预期的那样。

为什么部署的云应用程序没有接收URL查询参数,而本地开发服务器正确接收它们?我需要修改安全配置吗?

1 个答案:

答案 0 :(得分:0)

我确定了为什么这不起作用。实际上有两个原因,但主要原因是我从一个不是注册的Google AppEngine域的域转发请求。这两个请求都是完整的,但是查看日志,它们的处理方式不同。

从我无法控制的Google Apps域或任何常规域转发:

2012-06-04 13:18:48.146 /sayHello 200 443ms 0kb Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0

12.216.181.76 - - [04/Jun/2012:10:18:48 -0700] "GET /program/sayHello?name=bill InfoByID HTTP/1.1" 200 52 "http://somedomain.org/sayHello?name=bill"

来自我控制的Google Apps域并与此AppEngine实例相关联(请注意报告/处理请求的方式不同):

2012-06-04 13:18:41.312 /sayHello?name=bill 200 44ms 0kb Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0

12.216.181.76 - - [04/Jun/2012:10:18:41 -0700] "GET /sayHello?name=bill HTTP/1.1" 200 169 - "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0"...

另一个(令人尴尬)重叠的原因是我无法使用浏览器来测试网络服务,因为我使用了一个自动添加https的Firefox插件,这只是一个http网络服务。