2011-08-29 4 views
1

J'ai un serveur de processus de servlet demande.L'hôtel utilise getQueryString a obtenu cePourquoi j'ai perdu mon paramètre?

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

Mais quand j'utilise

rqs = req.getParameter("pams"); 

le débogueur montre rqs est nulle. mais cela fonctionne

jsoncallback = req.getParameter("jsoncallback"); 

Le format semble right.Why Je ne peux pas pams obtenir le paramètre 'pams'?

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

Où étais-tu la dernière fois que tu l'as vu? (Désolé, n'a pas pu résister.) –

+0

@ Tom Zych vous plaisantez pas? – Shisoft

+0

Oui, c'est une blague. –

Répondre

2

C'est parce que ce n'est pas correctement URL-encoded. Ces accolades, les deux-points et les virgules sont illégaux dans les URL. Je comprends que votre chaîne JSON ressemble à l'origine, non?

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

(qui est en fait invalid JSON, ces singlequotes auraient dû être doublequotes)

Vous devez sérialisation JSON à cordes en premier. La représentation de chaîne JavaScript doit ressembler à ceci:

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

(je l'ai pour un souci d'exhaustivité fixe les singlequotes invalides)

Comment arriver à ce format est laissé comme exercice pour vous. Le JSON-js est utile dans ceci.

Ensuite, vous devez avoir la fonction utilisée encodeURIComponent() de JavaScript encode dans un format de valeur de paramètre de requête HTTP appropriée:

var urlEncodedJsonString = encodeURIComponent(jsonString); 

qui devrait aboutir à cette valeur

%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 

Enfin, vous pouvez incluez cette valeur dans la chaîne de requête de votre requête HTTP et vous devriez pouvoir utiliser getParameter() de la manière habituelle (et ensuite fournir à un analyseur JSON comme Gson pour en extraire un objet Java complet). Veuillez noter que vous n'avez pas besoin de le décoder manuellement. L'API Servlet le fera pour vous lorsque vous utiliserez getParameter() pour obtenir le paramètre individuel au lieu d'analyser manuellement la chaîne de requête à partir de getQueryString(). Cet appel Map#containsKey() est également tout à fait inutile, il suffit d'obtenir le paramètre par getParameter(). Si c'est null, alors ce n'est tout simplement pas envoyé, sinon c'est là.

+0

A travaillé, merci. – Shisoft

Questions connexes