1

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

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

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

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

,于是浏览器收到预期的“你好,账单”响应。

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

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

如果我还分配了@DefaultParam,则声明的默认参数会按预期替换空值。

为什么部署的云应用收不到 URL 查询参数,而本地开发服务器却正确接收?是否有我需要修改的安全配置?

4

1 回答 1

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"

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

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"...

这不起作用的另一个(令人尴尬的)叠加原因是我从浏览器发出端口 443 请求来测试 Web 服务,因为我使用了一个自动添加 https: 的 Firefox 插件,而这只是一个 http Web 服务。

于 2012-06-04T18:16:27.777 回答