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 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": "My title","personal_reference": "My personal ref","qty": "3","description": "My description"}]}

问题

负载的格式似乎不正确,被 REST 服务器跳过了。

解决方案

问题已使用 kong.unirest.Unirest 库解决。

再见