【问题标题】:Failed POST callPOST 调用失败
【发布时间】: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 块,因为抛出的错误是由于静态变量初始化中的任何问题

标签: java rest servlets post


【解决方案1】:

根据您发布的堆栈跟踪。该错误基本上是因为静态块中的静态变量初始化有任何异常

以下是一些信息和一些链接,以提供更多信息

看到异常的名称,您可能会猜到这个 异常与变量的初始化有关。当然是的 此错误与静态变量的初始化有关。 变量可能是原始类型或用户定义类型。你可能都 了解类的静态初始化器。

http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-exceptionininitializererror-how-to-handle-exception-initializer-error/

http://craftingjava.blogspot.in/2012/06/javalangexceptionininitializererror.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多