如何将SendGrid发布的POST表单数据发送到Java中的url

时间:2013-10-23 12:52:47

标签: java http email

我目前正在开发一个小型邮件客户端,SendGrid服务用于发送/接收电子邮件。 SendGrid目前在我的应用程序中将收到的电子邮件发送到网址http://myapp.com/getmail。这在路线中的Play Framework应用程序中设置为:POST / getmail Application.getmail()。在getmail()中,我想连接到sendgrid发布电子邮件的url并以字节读取它(String for now,以确保我能够从url中读取)。我已经尝试了以下代码,但是不起作用:

public static Result getmail() {
try {
        URL oracle = new URL("http://myapp.com/getmail");
        BufferedReader in = new BufferedReader(
        new InputStreamReader(oracle.openStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null)
            System.out.println(inputLine);
        in.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这失败了:

java.io.FileNotFoundException: http://myapp.com/getmail
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at controllers.Application.getmail(Application.java:143)

这样做的正确方法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

我想出了这个代码来尝试捕获POST数据:

public static Result getmail() {
    Http.Request req = Controller.request();
    Http.RequestBody reqbody = req.body();
    System.out.println("AS TEXT: " + reqbody.asText()); 
    byte[] rawbuff = reqbody.as(byte[].class);
    String rawstr = new String(rawbuff);
    System.out.println("REQUEST: " + rawstr);
}

但第一个打印输出为空,第二个打印输出因NullPointerException而失败。任何人都知道为什么会这样?请求主体应该填写我从SendGrid收到的电子邮件。我需要原始的字节形式,所以DynamicForm类在这里没有用。谢谢!