将Json从Java应用程序传递到PHP(Laravel)

将Json从Java应用程序传递到PHP(Laravel),java,php,jquery,json,laravel,Java,Php,Jquery,Json,Laravel,我有一个web应用程序,其中我使用jQuery从控制器获取数据以刷新页面。请求传递一个包含嵌套数组的json对象。jQuery中的请求如下所示: $.get("resources", { categories: myJson }) .done(function (resultdata) { etc... 这个电话很好,能给我提供所需的数据 现在,问题是,我希望能够从桌面Java应用程序在这个控制器中调用相同的方法。以下是我所拥有的: public class HttpB

我有一个web应用程序,其中我使用jQuery从控制器获取数据以刷新页面。请求传递一个包含嵌套数组的json对象。jQuery中的请求如下所示:

    $.get("resources", { categories: myJson })
        .done(function (resultdata) {
etc...
这个电话很好,能给我提供所需的数据

现在,问题是,我希望能够从桌面Java应用程序在这个控制器中调用相同的方法。以下是我所拥有的:

public class HttpBasicAuth {

    public void connect() {
        try {

            URL url = new URL("http://someurl.com/resources/resources");
            String creds = "some.name@somecompany.com:somepassword";
            byte[] encoded = Base64.encodeBase64(creds.getBytes("UTF-8"));
            String encoding = new String(encoded);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);
            connection.setRequestProperty("Authorization", "Basic " + encoding);
            connection.setRequestProperty("Content-Type", "application/json");

            String input = "{'categories': [['8'],['33']]}";

            OutputStream os = connection.getOutputStream();
            os.write(input.getBytes());
            os.flush();

            if (connection.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + connection.getResponseCode());
            }

            InputStream content = (InputStream) connection.getInputStream();
            BufferedReader in
                    = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
我刚刚尝试在这里以字符串形式提供Json,但这只是为了测试。整个代码取自我在Google上搜索java请求中传递json的一个示例。当我开始工作时,我将使用一个库来创建json

但我不确定我的json是否正确。反正也不行

因此,jQuery调用确实有效。Java的那个没有。那个么,我怎样才能在Java中调用这个控制器方法,就像我知道的jQuery调用一样有效呢

编辑:

好的,在我的示例中,显然json没有正确创建。我现在已将该部分更改为建议的字符串输入=“{\”categories\”:[[\“8\”],[\“33\”]}

然而,这并没有解决问题。我仍然没有得到正确的结果。我也不确定json的传递是否需要一个POST请求,我很难让它与GET一起工作

但是,以下是我用于测试的两种控制器方法:

public function getResources()
    {

        $arr = array
        (array('8'),array('33'));
        $json = json_encode($arr);
        $outer_AND = json_decode($json, true);

        $query = $this->getQuery($outer_AND);
        $results = DB::connection('ccms')->select($query);

        return $results;
    }

    public function postResources()
    {
        $input = Input::get('categories');
        $outer_AND = array();
        if ($input != null) {
            $outer_AND = json_decode($input, true);
        }

        $query = $this->getQuery($outer_AND);
        $results = DB::connection('ccms')->select($query);

        return $results;
    }
POST方法现在是我实际尝试使用的方法,另一个方法只是将值模拟为php数组,以检查结果应该是什么。所以我试图从输入中获取值,但它不起作用

编辑2:

好的,我现在在检查参数是否为空时发现,因此它显然根本没有被发送。我已经对POST做了更改,并且根据这里的建议更改了json。但是当post参数到达控制器方法时,它仍然是空的,所以这并不重要

怎么了?为什么不发送参数

String input = "{'categories': [['8'],['33']]}";
无效
JSON
将其更改为:

String input = "{\"categories\": [[\"8\"],[\"33\"]]}";

您显示/分配给
input
的JSON不是有效的JSON。@BrianRoach我没有看到他向我们显示返回的JSON,我看到他构造了一个javascript对象作为参数传递,这是可以的。@Ohgod为什么我看到他构造了无效的JSON并将其与
GET
一起发送,这。。。这就是问题所在。好的,谢谢你的纠正!我对json非常陌生。但不幸的是,它仍然不起作用。请看我的更新@AndersSvensson实际上我已经看过你的代码了,你创建了输入字符串,但从来没有使用过它。我不太明白。如果我正确理解了我读到的关于HttpUrlConnection的内容,那么我在执行此操作时使用它:os.write(input.getBytes());这就足够发布了。但也许我误解了。在任何情况下,我都是使用HttpClient来实现的,我会接受这个答案,因为您指出了json中的错误。