8

我必须使用以下结构发送POST请求。使用Google API中的com.google.api.client.http.HttpRequest对象发送POST请求

POST https://www.googleapis.com/fusiontables/v1/tables 
    Authorization: /* auth token here */ 
    Content-Type: application/json 

    { 
    "name": "Insects", 
    "columns": [ 
    { 
     "name": "Species", 
     "type": "STRING" 
    }, 
    { 
     "name": "Elevation", 
     "type": "NUMBER" 
    }, 
    { 
     "name": "Year", 
     "type": "DATETIME" 
    } 
     ], 
    "description": "Insect Tracking Information.", 
    "isExportable": true 
    } 

我使用下面的代码来发送POST请求,但我得到的“400错误的请求”的响应

String PostUrl = "https://www.googleapis.com/fusiontables/v1/tables"; 
HttpRequestFactory requestFactory = HTTP_TRANSPORT.createRequestFactory(credential); 

//generate the REST based URL 
GenericUrl url = new GenericUrl(PostUrl.replaceAll(" ", "%20")); 
//make POST request 

String requestBody = "{'name': 'newIndia','columns': [{'name': 'Species','type': 'STRING'}],'description': 'Insect Tracking Information.','isExportable': true}"; 

HttpRequest request = requestFactory.buildPostRequest(url, ByteArrayContent.fromString(null, requestBody)); 
request.getHeaders().setContentType("application/json"); 
// Google servers will fail to process a POST/PUT/PATCH unless the Content-Length 
// header >= 1 
//request.setAllowEmptyContent(false); 
System.out.println("HttpRequest request" + request); 
HttpResponse response = request.execute(); 

我不知道是否有人存在谁对这个类似任务的工作可以帮助我根据本问题开始时提到的POST请求格式发送POST请求。

回答

9

我曾尝试使用下面的代码

String requestBody = "{'name': 'newIndia','columns': [{'name': 'Species','type': 'STRING'}],'description': 'Insect Tracking Information.','isExportable': true}"; 
HttpRequest request = requestFactory.buildPostRequest(url, ByteArrayContent.fromString("application/json", requestBody)); 
request.getHeaders().setContentType("application/json"); 
+0

其实我有'null'更换ByteArrayContent.fromString'的'的第一个参数,以获得正确的HTTP请求发送POST请求。 'requestFactory.buildPostRequest(url,ByteArrayContent.fromString(null,requestBody));' – Davincho

+0

对于'application/x-www-form-urlencoded',使用'com.google.api.client.http.UrlEncodedContent' – Kalem