繁体   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