簡體   English   中英

使用HttpClient將URL中的JSON查詢字符串發送到Web服務(Java)

[英]Using HttpClient to send JSON query string in a URL to a web service (Java)

我有一個構建的Web服務...我現在要做的是將一個簡單請求(其中包含一個Tapestry Web應用程序的json查詢字符串)發送到該Web服務。 我到處搜索,大多數人說要使用Apache HttpClient來實現這一目標。 與HttpClient一起使用URIBuilder。

我嘗試發送的Json對象看起來像這樣

{“ user”:{“ userEmail”:“ jdoe@gmail.com”,“ firstName”:“ John”,“ lastName”:“ Doe”,“ phone”:“ 203- 555-5555”},“ password” :“死”}

*我意識到以純文本等方式發送密碼的問題...

可用的網址(通過手動輸入網絡瀏覽器進行測試,並且該網絡服務已為Android客戶端和iOS客戶端提供服務)

http:// ##。##。###。## / createuser?json = {“ user”:{“ userEmail”:“ jdoe@gmail.com”,“ firstName”:“ John”,“ lastName” :“ Doe”,“ phone”:“ 203-555-5555”},“ password”:“ dead”}

這是我從谷歌那里拼湊在一起的HttpClient代碼,試圖弄清楚為什么它不起作用。 本質上,我想做的是使用URIBuilder創建URI,然后使用新建的URI構造HttpPost或HttpGet對象。 但是在URIBuilding過程中出了點問題。 調試時,嘗試設置URI的所有方面時都會引發異常。

Object onSuccess() throws ClientProtocolException, IOException, URISyntaxException{
    // json = {"user":{"userEmail":"jdoe@gmail.com","firstName":"John","lastName":"Doe","phone":"203- 555-5555"},"password":"dead"}
    String json = user.toJson();
    URIBuilder builder = new URIBuilder();
    // Error gets thrown when I step over the next line
    builder.setScheme("http").setHost("##.###.##.###").setPort(8080).setPath("createuser").setQuery("json=" +json); 
    URI uri = builder.build();

    HttpPost request = new HttpPost(uri);
    DefaultHttpClient httpClient = new DefaultHttpClient();
    String tmp = request.getURI().toString();

    HttpResponse response = httpClient.execute(request); 
    index.setResponse(EntityUtils.toString(response.getEntity()));
    return index;

當我越過代碼中注釋的行時返回的錯誤是

[錯誤] TapestryModule.RequestExceptionHandler處理請求失敗,出現未捕獲的異常:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava / lang / String; Ljava / nio / charset / Charset;)Ljava / util / List; java.lang.NoSuchMethodError:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava / lang / String; Ljava / nio / charset / Charset;)Ljava / util / List;

我已經嘗試了許多其他方法和對象的組合,以使此請求正確發送到服務器,但似乎沒有任何效果。 希望我能忽略一些相對簡單的事情。

在此先感謝您提供的任何指導。

您很可能在類路徑上使用了錯誤的一兩個版本的apache httpcomponents。 如果您正在運行Tapestry,它將在錯誤頁面上的類路徑上打印出所有軟件包。 在此處進行調查,找到要加載的httpcomponents,找出它的來源並進行修復。

如果這不起作用,則應與我們共享一些運行時環境。 哪個servlet引擎,從哪個IDE運行,或者從命令行運行。 您在使用Maven嗎? 如果是這樣,請分享您的pom。 等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM