2017-09-13 5 views
0

Auf Client-Seite ich den folgenden Code verwenden:, wie den Wert erhalten von HttpMethodParams

HashMap<String, String> paramMap = new HashMap<>(); 
paramMap.put("userId", "1579533296"); 
paramMap.put("identity", "352225199101195515"); 
paramMap.put("phoneNum", "15959177178"); 
HttpClient client = new HttpClient(); 
PostMethod method = new PostMethod("http://localhost:8088/requestTest"); 
HttpMethodParams p = new HttpMethodParams(); 
for (Map.Entry<String, String> entry : paramMap.entrySet()) { 
    p.setParameter(entry.getKey(), entry.getValue()); 
} 
method.setParams(p); 
client.executeMethod(method); 

Und den Code von meiner Server-Seite ist wie folgt:

@RequestMapping("/requestTest") 
public void requestTest(HttpServletRequest request) throws IOException { 
    String userId = request.getParameter("userId"); 
    String identity= request.getParameter("identity"); 
    String phoneNum= request.getParameter("phoneNum"); 
    System.out.println(userId+identity+phoneNum); 
} 

aber ich habe die null Wert von userId, identity und phoneNum, also wie kann ich den Wert von ihnen erhalten? Ich weiß, dass ich method.setParameter (key, value) verwenden kann, um den Parameter auf der Clientseite festzulegen und getParameter (key) zu verwenden, um den Parameterwert abzurufen, aber ich bin nur neugierig, ob es eine Möglichkeit gibt, den Wert serverseitig zu ermitteln von HttpMethodParams.

Antwort

1

Ich denke, Sie sind verwirrt zwischen benutzerdefinierten Parametern in HttpServletRequest und HttpMethodParams festgelegt.

Per JavaDoc von - HttpMethodParams,

Diese Klasse stellt eine Sammlung von HTTP-Protokoll-Parameter für HTTP-Methoden.

Dies sind vordefinierte Parameter spezifisch für diese HTTP-Methode (see this) und hat nichts mit dem zu tun - HttpServletRequest Parameter.

müssen anfordern Parameter eingestellt werden als here

Sie haben auch

dargestellt zu beachten, dass alle diese Klassen (HttpClient, PostMethod, HttpMethodParams usw.), die Sie auf Client-Seite verwenden, sind von Apache nur ein bequemer Weg zu sein um einen HTTP-Endpunkt zu generieren und aufzurufen, aber was Sie auf der Serverseite haben werden, ist ein HttpServletRequest und dort ist das System nicht Apache HttpClient-spezifisch.

Also alles, was Sie auf der Server-Seite bekommen ist, einen benannten Header oder Header mit - getHeaders(), getIntHeader(), getHeaderNames(), getDateHeader(), getProtocol() usw. zu extrahieren. Server-Seite ist standardisiert, so dass Sie nichts wie - HttpMethodParams dort sehen sollten.

+0

Also ... meinst du, es gibt keine Möglichkeit, diese Art von Parametern auf der Serverseite zu bekommen? Ich weiß, ich kann Methode verwenden.setParameter (Schlüssel, Wert), um den Parameter auf der Clientseite festzulegen und getParameter (Schlüssel) zu verwenden, um den Parameterwert abzurufen, aber ich bin nur neugierig, ob es eine Möglichkeit gibt, den Wert serverseitig von HttpMethodParams zu erhalten. – zhenganyi

+0

Ich habe meine Antwort aktualisiert, hoffe das hilft !! ... Die clientseitige Terminologie ist auf der Serverseite nicht anwendbar. –

0

Sie müssen Ihre Parameter mit HttpServletRequest senden.

HttpMethodParams stellen eine Sammlung von HTTP-Protokollparametern dar, die für HTTP-Methoden geeignet sind. Liste der Http-Methode Parameter kann here gefunden werden.

Wenn Sie es jedoch zwangsweise mit HttpMethodParams senden möchten, können Sie die JSON-Repräsentation Ihres Parameters in einer der Variablen von HttpMethodParameter festlegen und dessen Wert mit diesem Variablennamen abrufen.

Beispielcode:

HttpMethodParams p = new HttpMethodParams(); 
p.setCredentialCharset("{userId":1579533296}"); 
//for loop not required 
//your code 

Jetzt können Sie diese JSON mit ObjectMapper analysieren und Ihren gewünschten Wert erhalten.

Beispielcode:

HttpMethodParams p = new HttpMethodParams(); 
JSONObject jsonObj = new JSONObject(p.getCredentialCharset()); 
jsonObj.get("userdId"); 

Hinweis: Diese Arbeit kann aber nicht die empfohlene Methode.

Verwandte Themen