Действие Rails не отвечает на Java POST - PullRequest
1 голос
/ 30 января 2011

Действительно просто, или я так думал.

Java-код

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;

public class UrlConnectionTest {

    private static final String TEST_URL = "http://localhost:3000/test/hitme";

    public static void main(String[] args) throws IOException  {

        URLConnection urlCon = null;
        URL url = null;
        OutputStreamWriter osw = null;

        try {
            url = new URL(TEST_URL);
            urlCon = url.openConnection();
            urlCon.setDoOutput(true);
            urlCon.setRequestProperty("Content-Type", "text/plain");            
            osw = new OutputStreamWriter(urlCon.getOutputStream());
            osw.write("HELLO WORLD");

        } catch (Exception e) {
            e.printStackTrace();                
        } finally {
            if (osw != null) {
                osw.close();
            }
        }

    }

}

TestController # hitme

def hitme
  puts "SOMEONE IS HITTING ME!" * 100
  puts request.env.inspect
end

Когда я запускаю код Java, я ничего не вижу в консоли Rails Server. Однако, когда я нажимаю на URL в моем браузере, я получаю вывод, как указано в TestController#hitme. Я думал, что это будет просто, но не повезло. Есть идеи?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 30 января 2011

Вы, вероятно, получаете исключение, которого не видите, потому что глотаете его.По крайней мере, напечатайте исключение в блоке catch.

Даже если это не проблема, вы будете часто преследовать свой хвост, если у вас будет привычка глотать ошибки.


Я не думаю, что вы на самом делеотправлять любые данные, пока вы не позвоните

urlCon.getInputStream();
0 голосов
/ 30 января 2011

Не возитесь с URLConnection самостоятельно, пусть Resty справится с этим.

Вот код, который вам нужно написать (я полагаю, вы получаете текст обратно):

import static us.monoid.web.Resty.*;
import us.monoid.web.Resty;  
...    
new Resty().text(TEST_URL, content("HELLO WORLD")).toString();
0 голосов
/ 30 января 2011

Это ваш URL в вашем java-коде показывает имя контроллера "test" (test / hitme), но вы упоминаете, что имя вашего контроллера - TestController?т.е. URL в вашем коде Java должен быть изменен.

   private static final String TEST_URL = "http://localhost:3000/TestController/hitme";
...