【发布时间】:2021-09-02 17:58:40
【问题描述】:
我有一个简单的 HTML 表单来向 REST API 发送请求。效果很好,当我提交时,它会将表单数据发送到 API 并在浏览器中显示响应。
<form name="theForm" action="localhost:8080/App/rest/consumeForm" method="post">
<input name="userName" value="Bob Smith" /><br/>
<input type="submit" value="submit"/>
</form>
浏览器显示:
{"address": "12 First St.", "city": "Toronto"}
我想捕获响应。有任何想法吗? (没有 ajax 或 javascript,请使用普通的旧 Servlet 或 JSP)
第 2 部分: 我现在将表单发布到我创建的 servlet,它处理来自 REST API 的请求和响应。它工作得很好,但它需要表单数据 URLEncoded。谁知道有没有办法将表单数据转换成这样的字符串,甚至直接将表单数据转换成JSON?
String charset = java.nio.charset.StandardCharsets.UTF_8.name();
String userName = "Bob Smith";
String country = "Canada";
String queryString = String.format("userName=%s&country=%s"
,URLEncoder.encode(userName, charset)
,URLEncoder.encode(country, charset)
);
我可以动态构建上面的 queryString 吗?
//// send request
URLConnection connection = new URL("localhost:8080/App/rest/consumeForm").openConnection();
connection.setDoOutput(true); // Triggers POST.
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
try (OutputStream output = connection.getOutputStream()) {
output.write(queryString.getBytes(charset));
}
//// get response
BufferedReader apiResponse = new BufferedReader(new InputStreamReader((connection.getInputStream())));
String output;
System.out.println("\n\n\nrecieved....");
while ((output = apiResponse.readLine()) != null) {
System.out.println(output);
}
【问题讨论】: