如何在Java中向REST API发送Request有效负载?
我想从以下内容中检索JSON数据: https : //git.eclipse.org/r/#/c/11376/
请求URL: https://git.eclipse.org/r/gerrit/rpc/ChangeDetailService
: https://git.eclipse.org/r/gerrit/rpc/ChangeDetailService
请求方法: POST
请求标题:
Accept:application/json Content-Type:application/json; charset=UTF-8
请求有效负载:
{"jsonrpc":"2.0","method":"changeDetail","params":[{"id":11376}],"id":1}
我已经尝试过这个答案,但我得到400 BAD REQUEST
。
任何人都可以帮我解决这个问题吗?
谢谢。
以下代码适用于我。
//escape the double quotes in json string String payload="{\"jsonrpc\":\"2.0\",\"method\":\"changeDetail\",\"params\":[{\"id\":11376}],\"id\":2}"; String requestUrl="https://git.eclipse.org/r/gerrit/rpc/ChangeDetailService"; sendPostRequest(requestUrl, payload);
方法实现:
public static String sendPostRequest(String requestUrl, String payload) { try { URL url = new URL(requestUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("POST"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); writer.write(payload); writer.close(); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuffer jsonString = new StringBuffer(); String line; while ((line = br.readLine()) != null) { jsonString.append(line); } br.close(); connection.disconnect(); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } return jsonString.toString(); }
我尝试了一个rest客户端。
标题:
- POST / r / gerrit / rpc / ChangeDetailService HTTP / 1.1
- 主持人:git.eclipse.org
- User-Agent:Mozilla / 5.0(Windows NT 5.1; rv:18.0)Gecko / 20100101 Firefox / 18.0
- 接受:application / json
- Accept-Language:null
- Accept-Encoding:gzip,deflate,sdch
- accept-charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3
- Content-Type:application / json; 字符集= UTF-8
- 内容长度:73
- 连接:保持活力
它工作正常。 我用一个好身体检索200 OK。
为什么在请求中设置状态代码? 并使用Accept:application / json,application / json,application / jsonrequest进行多次声明“ Accept ”。 只是一个声明就足够了。