【问题标题】:Java REST api Send array using HTTP PUT methodJava REST api 使用 HTTP PUT 方法发送数组
【发布时间】:2021-01-17 07:33:51
【问题描述】:

我无法在 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,响应也ok。

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": "我的个人 ref","qty": "3","description": "我的描述"}]}

【问题讨论】:

  • 你好 LightmanX。请包含java代码生成的错误信息
  • 我可以毫无错误地执行此代码,但服务器无法识别所有发送的值。换句话说,我无法通过 Java 传递 $postData 之类的对象。

标签: java php json rest httpclient


【解决方案1】:

问题

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

解决方案

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

再见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多