【发布时间】:2015-07-15 18:33:08
【问题描述】:
我正在尝试通过 Java 向 REST Web 服务发送请求。
我需要向 Web 服务发送一些表单参数,因为它们太大而无法通过 queryParams 发送。
发送的httpRequest方法如下:
public static String sendPostWithParams(String urlParam, Map<String, Object> params) throws Exception {
URL url = new URL(urlParam);
StringBuilder postData = new StringBuilder();
for (Map.Entry<String, Object> param : params.entrySet()) {
if (postData.length() != 0)
postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postDataBytes);
conn.connect();
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.flush();
wr.close();
int responseCode = conn.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
// print result
return response.toString();
}
我尝试通过 Postman 发送请求,它工作正常,就像预期的那样。但是当我尝试通过 Java 发送请求时,我在控制台中打印了以下两行,然后它就冻结在那里直到超时。
15:18:18,160 INFORMACIÓN [org.jboss.resteasy.cdi.CdiInjectorFactory] (http--0.0.0.0-8080-1) Found BeanManager at java:comp/BeanManager
15:18:18,170 INFORMACIÓN [org.jboss.resteasy.spi.ResteasyDeployment] (http--0.0.0.0-8080-1) Deploying javax.ws.rs.core.Application: class .com.services.rest.ApplicationConfig$Proxy$_$$_WeldClientProxy
没有调用 Web 服务,因为我在那里有一个断点,但它永远不会到达它。
所以我认为问题可能出在我通过 Java 生成请求的方式上,但我还没有找到另一种方法。
提前致谢。
【问题讨论】:
标签: java rest httprequest