[英]submit a POST request with parameters and a body using Java & REST
我正在尝试使用一个现有的API,该API要求使用POST“提交”一个json对象,但是该页面在请求中还需要一些参数,在此示例中,我们将使用名称和电子邮件。 我是REST的超级新手,所以我可能在这里的某个地方犯了一个无知的错误。
这是我到目前为止在servlet中拥有的代码:
String path = "http://www.test.com/submit";
URL url = new URL(path);
conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
Gson gson = new Gson();
//julySchedule is the object I want to submit with this request alongside the parameters.
String input = gson.toJson(julySchedule);
OutputStream os = conn.getOutputStream();
os.write(input.getBytes());
os.flush();
if (conn.getResponseCode() != 200) {
throw new RuntimeException("HTTP POST Request Failed with Error code : "
+ conn.getResponseCode());
}
我试图将参数放在URL中,例如:
/submit?name=Name&email=test@gmail.com
但这没有用,因为POST请求不会接受这样的参数。 然后,我尝试将其添加到Output流中,如下所示:
String params = "name=Name&email=test@gmail.com"
OutputStream os = conn.getOutputStream();
os.write(path.toBytes());
os.write(input.getBytes());
os.flush();
但这也不起作用。 我在某个地方犯了一个非常愚蠢的错误吗?
POST请求包含查询字符串非常好(尽管不是最佳实践)。
由于您将application/json
用作Content-Type
,因此我假设您的有效负载必须是JSON对象。 您不能在POST正文中混合使用参数。 您有2个选择:
Content-Type:
application/x-www-form-urlencoded
,如下所示: name=NAME&email=EMAIL&jsonPayLoad={Your Json Object}
。 服务器应从POST负载中提取jsonPayLoad
。 在写入POST输出流之前,请确保使用encodeURIComponent
进行转义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.