【发布时间】:2014-03-18 05:53:38
【问题描述】:
我正在从 Java 中进行 POST 调用,但我不确定为什么它没有通过。代码如下:
String screencastStartURL = "......";
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("stateID", s_id));
nameValuePairs.add(new BasicNameValuePair("startTime", screencastStartTime));
nameValuePairs.add(new BasicNameValuePair("identifier", screencastId));
System.out.println("about to make postCall");
String postResponse = Commons.postCall(screencastStartURL, nameValuePairs);
out.println(postResponse); // out is an earlier instantiated PrintWriter
postCall方法如下:
public static String postCall(String url, List<NameValuePair> nameValuePairs) {
System.out.println("Within postCall method");
String ans = "";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try {
System.out.println("Within postCall method 2");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
ans = (EntityUtils.toString(response.getEntity()));
} catch (IOException e) {
e.printStackTrace();
}
return ans;
}
当我在我的 Tomcat 服务器上部署此代码时,它会在终端中打印 about to make postCall,这意味着它会成功执行,直到发出 POST 调用。但是,它不打印Within postCall method,这意味着调用本身出了问题?
我看到的错误消息是NullPointerException,导致ServletException
编辑
但是,当我使用 POSTMAN Rest Client Chrome 应用程序进行 POST 调用时,它会成功通过。
二次编辑
我在浏览器中看到的堆栈跟踪是
exception
javax.servlet.ServletException: Servlet execution threw an exception
root cause
java.lang.ExceptionInInitializerError
com.bl.apps.MemoLocalRecorder.App.doGet(App.java:121)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.NullPointerException
java.io.Reader.<init>(Reader.java:78)
java.io.InputStreamReader.<init>(InputStreamReader.java:72)
com.bl.util.Commons.setURL(Commons.java:221)
com.bl.util.Commons.<clinit>(Commons.java:150)
com.bl.apps.MemoLocalRecorder.App.doGet(App.java:121)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
【问题讨论】:
-
也许
Commons为空?对不起,这是一个静态方法。我会撤回评论。 -
你能发布堆栈跟踪吗?
-
String postResponse = Commons.postCall(screencastStartURL, nameValuePairs);
-
@JonnyHenly out 实际上是一个
PrintWriter对象,之前实例化为PrintWriter out = response.getWriter();@BharathRallapalli 我不明白你的意思。您发布的内容与我的相同。 -
你的代码中是否有
static块,因为抛出的错误是由于静态变量初始化中的任何问题