【问题标题】:I cant insert data from a java program to laravel app via api我无法通过 api 将 java 程序中的数据插入 laravel 应用程序
【发布时间】:2018-09-23 09:46:04
【问题描述】:

我是 laravel 的新手,我想通过 java 程序中的 laravel api 将数据保存到我的在线服务器,但我遇到了错误。

这是我在 api.php 上的路线:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});


Route::post('hooks','ApiTestController@store');

我的 ApiTestController:它只是处理 POST 请求然后保存到表中。

public function store(Request $request)
    {

            $postdata = json_decode($request->input('post_data'), true);
            $datas = $postdata['header'];
            $data = $datas[0];
            $testH = new TestH();
            $testH->test_date = $data['test_date'];
            $testH->expiration = $data['test_date'];
            $testH->source = $data['source'];


            $testH->save();

            return $testH;
   }

还有我的java代码:

try {
    //local development server url
    URL url = new URL("http://127.0.0.1:8000/api/hooks");
    URLConnection con = url.openConnection();
    // activate the output
    con.setDoOutput(true);
    PrintStream ps = new PrintStream(con.getOutputStream());

        //create the JSON String
        String json = null;
        StringWriter sw = new StringWriter();
        JSONWriter wr = new JSONWriter(sw);

        try {
            wr.object().key("header").array();

            wr.object();
            wr.key("test_date").value(new Date());
            wr.key("source").value("TEST");
            wr.key("expiration").value(new Date());


            wr.endObject();

            wr.endArray().endObject();
            json = sw.toString();
            System.out.println(json);
        } catch (JSONException ex) {
            Logger.getLogger(WebConnectSample.class.getName()).log(Level.SEVERE, null, ex);
        }

        // send to laravel server
        ps.print("post_data="+json);

        HttpURLConnection httpConn = (HttpURLConnection) con;
        InputStream is;
        if (httpConn.getResponseCode() >= 419) {
            is = httpConn.getErrorStream();
        } else {
            is = httpConn.getInputStream();
        }

        // read the server reply
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String line = null;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
            // close the print stream
        }
        ps.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

问题是当我不通过$testH->save() 保存时,一切正常。但是如果我包含它,java会返回以下错误:

Type error: Argument 1 passed to Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() must be an instance of Symfony\Component\HttpFoundation\Response, string given, called in C:\Users\relixusdev\Documents\WebProjects\tcmsite\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php on line 61

知道是什么部分导致了错误吗?它与身份验证有关吗?我只是希望能够通过我的 java 程序保存到在线数据库。

【问题讨论】:

  • 你用的是什么版本的 laravel?
  • Laravel 框架 5.6.15

标签: java php json laravel restful-authentication


【解决方案1】:

尝试使用前缀如下的路由组

Route::group(['prefix' => 'api'], function() {
   Route::post('hooks','ApiTestController@store');
});

【讨论】:

  • 同样的错误。它所做的只是在路由上添加另一个 URI:list api/api/hook
【解决方案2】:

如果有人来到这里遇到同样的问题,我发现问题是我的桌子上没有 created_at 和 updated_at 列。我没有意识到它对 laravel 的要求。傻我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多