2011-08-29 42 views
1

我有一个servlet处理jsoncallback request.The服务器使用getQueryString得到这个为什么我失去了我的参数?

"jsoncallback=jQuery16208276397785205389_1314579791091&pams={%27title%27:%27%u56DE%u590D%uFF1Afoo%27,%27tag%27:%27%27,%27content%27:%27TEST%27,%27Friedly%27:%27%27,%27IsPrivate%27:%27%27,%27Contact%27:%27%27,%27base%27:5197}&_=1314579902441" 

但是当我使用

rqs = req.getParameter("pams"); 

调试器显示RQS为空。 但这个工程

jsoncallback = req.getParameter("jsoncallback"); 

格式似乎right.Why我不能保诚获得“保诚”参数?

String rqs = req.getQueryString(); 
    if (rqs != null) { 
     if (req.getParameterMap().containsKey("jsoncallback")) { 
      rqs = req.getParameter("pams"); 
      jsoncallback = req.getParameter("jsoncallback"); 
     } 
     QS = URLDecoder.decode(rqs, "UTF-8"); 
    } 
+0

你上次看到它的时候,你在哪里? (对不起,忍不住。) –

+0

@Tom Zych你在开玩笑吧? – Shisoft

+0

是的,这是一个笑话。 –

回答

2

这是因为它不正确URL-encoded。这些大括号,冒号和逗号在URL中是非法的。我知道你的JSON字符串最初看起来像这样,对吗?

var json = { 
    'title': '回复:foo', 
    'tag': '', 
    'content': 'TEST', 
    'Friedly': '', 
    'IsPrivate': '', 
    'Contact': '', 
    'base': 5197 
}; 

(这实际上是invalid JSON,这些singlequotes应该是双引号)

您需要先序列化JSON为String。 JavaScript的字符串表示应该是这样的:

var jsonString = '{"title":"回复:foo","tag":"","content":"TEST","Friedly":"","IsPrivate":"","Contact":"","base":5197}'; 

(我为完整起见固定的无效singlequotes)

如何到达该格式留作练习。 JSON-js在这方面很有用。

然后,你应该使用JavaScript的encodeURIComponent()功能,URL编码成一个适当的HTTP请求参数值的格式:

var urlEncodedJsonString = encodeURIComponent(jsonString); 

这将导致该值

%7B%22title%22%3A%22%E5%9B%9E%E5%A4%8D%EF%BC%9Afoo%22%2C%22tag%22%3A%22%22%2C%22content%22%3A%22TEST%22%2C%22Friedly%22%3A%22%22%2C%22IsPrivate%22%3A%22%22%2C%22Contact%22%3A%22%22%2C%22base%22%3A5197%7D 

最后,你可以在HTTP请求的查询字符串中包含该值,您应该能够使用getParameter()常用的方法(然后将其提供给像Gson这样的JSON解析器以获取完整的Java对象)。请注意,您不需要手动对其进行网址解码。当您使用getParameter()获取单个参数而不是手动解析来自getQueryString()的查询字符串时,Servlet API将为您执行此操作。那Map#containsKey()呼叫也完全没有必要,只需通过getParameter()获取参数即可。如果它是null,那么它不会被发送,否则它就在那里。

+0

工作过,谢谢。 – Shisoft

相关问题