2011-08-29 88 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

相關問題