簡體   English   中英

Java REST api使用HTTP PUT方法發送數組

[英]Java REST api Send array using HTTP PUT method

我無法在 Java 中實現 REST API

我有一個使用 PHP 的通用實現的工作示例。

我如何使用 json 庫和 HttpClient(HttpPut 請求)在 Java 中實現它?

這是 PHP 示例

//DATA TO UPDATE
$postData = array(
    'item'   => array(
        'title'              => 'My title',
        'personal_reference' => 'My personal ref',
        'qty'                => 3,
        'description'        => 'My description'
    )
);


//RESOURCE CALL WITH PUT METHOD
$url = 'https://rest.restserv.com/item/1234?token=MyPersonalToken';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, http_build_query($postData) );
curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$xml_response  = curl_exec($ch);

我的(不工作)方法是這樣的:

Map<String,String> dataMap = new HashMap<String,String>();
dataMap.put("title", "some text");
dataMap.put("personal_reference", "my ref");
dataMap.put("qty", "1");
dataMap.put("description", "some desciption text");

String url = "https://rest.restserv.com/item/1234?token=MyPersonalToken";

HttpPut putRequest = new HttpPut(url);

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
for (Map.Entry<String, String> entry : dataMap.entrySet()) {
    builder.addTextBody(entry.getKey(), entry.getValue());
}
putRequest.setEntity(builder.build());
response = httpClient.execute(putRequest);

謝謝和最好的問候。

更新

現在我正在嘗試使用另一種方法。 對象 Map<String,String> dataMap 包含要發送的項目的所有詳細信息。 不幸的是,我仍然無法發送項目詳細信息。 請求狀態為 200,響應也正常。

HttpClient httpClient = HttpClientBuilder.create().build();
HttpPut putRequest = new HttpPut(url);
putRequest.addHeader("Content-Type", "application/json; charset=utf-8");
JSONArray itemDetails = new JSONArray();                
itemDetails.put(dataMap);               
JSONObject root = new JSONObject().put("item", itemDetails);
StringEntity entity = new StringEntity(root.toString(2),  "UTF-8");
System.out.println("ROOT is:::: "+root.toString(2));
putRequest.setEntity(entity);
response = httpClient.execute(putRequest);

root.toString(2)結果是:

{"item": [{"title": "我的標題","personal_reference": "我的個人參考","qty": "3","description": "我的描述"}]}

問題

似乎有效載荷的格式不正確並且被 REST 服務器跳過。

解決方案

該問題已使用 kong.unirest.Unirest 庫解決。

再見

暫無
暫無

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

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