2016-07-18 31 views
1

我无法从顶端找出JSON从代码名一个API放置请求。我没有找到任何示例来提出此请​​求。如何通过代码名一个API制作JSON PUT请求

问题: 1.我不确定是否必须发送内容长度参数。如果是,我该如何发送? 2.我必须发送只有“真”没有别的请求正文。没有关键和值使用req.addArgument()方法。 3.我是否必须使用buildRequestBody()方法来覆盖请求。你能提供一个例子吗? 4.如何在收到回应后验证结果。

任何帮助,可以赞赏。 谢谢。

请找到下面的代码。

req.setUrl(identityUrl); 
req.setPost(false); 
req.setHttpMethod("PUT");    
req.setContentType("application/json"); 
req.addRequestHeader("authorization", token); 
req.addArgument("Content-Length", "4"); 
req.setReadResponseForErrors(true); 
InfiniteProgress ip = new InfiniteProgress(); 
Dialog d = ip.showInifiniteBlocking(); 
NetworkManager.getInstance().addToQueueAndWait(req); 
d.dispose(); 
JSONParser parser = new JSONParser(); 
Map map2 = null; 
try { 
map2 = parser.parseJSON(new InputStreamReader(new ByteArrayInputStream(req.getResponseData()), "UTF-8")); 
} catch (IOException ex) { 
     ex.printStackTrace(); 
} 

回答

0

如果你想要的内容被完全嵌入你需要重写buildRequestBody方法。请注意,帖子需要是真实的被调用的身体。

我不认为你需要content-length

req = new ConnectionRequest(identityUrl) { 
    protected void buildRequestBody(OutputStream os) throws IOException { 
     os.write(json.getBytes("UTF-8")); 
    } 

    protected void readResponse(InputStream input) throws IOException { 
     map2 = parser.parseJSON(new InputStreamReader(input, "UTF-8")); 
    } 

    protected void postResponse() { 
     // response completed, this is called on the EDT do the application logic here... 
    } 
}; 
req.setPost(true); 
req.setHttpMethod("PUT");    
req.setContentType("application/json"); 
req.addRequestHeader("authorization", token); 
req.setReadResponseForErrors(true); 
InfiniteProgress ip = new InfiniteProgress(); 
Dialog d = ip.showInifiniteBlocking(); 
req.setDisposeOnCompletion(d); 
NetworkManager.getInstance().addToQueue(req); 

请注意,我不再需要关闭流或处理IOException作为连接请求做了我的一切。另请注意,读/构建方法在网络线程上调用,而不在EDT上,因此您需要执行postResponse中的其余流程。

+0

仅供参考如果问题是正确/有帮助upvote并检查旁边的复选框接受它。这将为您提供在堆栈溢出社区内提供额外特权的点数。 –