2012-06-04 52 views
1

我已经实现了一个测试方法,使Jersey能够在我的Google AppEngine本地开发服务器上运行。该方法的签名是:Google AppEngine URL查询字符串参数未传递到Jersey GET处理程序

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

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

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

,于是浏览器会收到预期的“你好,法案”的回应。

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

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

如果我还指定了@DefaultParam,声明的默认参数将替换空值,如预期的那样。

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

+0

不,没有理由不应该这样做。我一直这样做。你确定你正确地部署你的代码吗?检查版本的部署时间,并确保你没有在那里的旧版本的代码... –

+0

正确的你,你的确认启发我继续努力:) – elmor

回答

0

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

从谷歌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" 

从谷歌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"... 

其他(尴尬)覆盖原因,这是行不通的了,我是从我的浏览器做端口443个请求测试Web服务,因为我使用的是Firefox的插件,增加了https:自动,这只是一个http 网络服务。

相关问题