0

問題は、JavaHTTPUrlConnectionが HTTP.PATCH をサポートしていないことです。

そこで、body を使用した削除の実装を行うガイドを見つけました。でも受けてるHTTP/1.1 400 Bad Request

これにたどり着きました:
*インポート compile("org.apache.httpcomponents:httpclient:4.3.1")

方法:

@SneakyThrows
    public void firebasePatch(final PARAM p) {
        new TaskRunner() {

            @Override
            public void command() throws Throwable {
                final HttpClient httpClient = new DefaultHttpClient();
                HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 10000);
                PARAM p2 = p;
                String callUrl = url+".json"+"?auth="+firebaseAuth;
                HttpPatch httpPatch = new HttpPatch(callUrl);
                httpPatch.addHeader("Accept", "*/*");
                httpPatch.addHeader("Content-Type", "application/json");
//              httpPatch.addHeader("auth", firebaseAuth);

                String patchString = "{'userwallposts': {'ame_lector_dk': [{'wallPostUrl': '/wallposts/1','createdByLink': '',"+
                            "'summary': 'blah gik sig ikke en tur, og købte blah med hjem','createdDate': '20140126220550','comments': '2',"+
                            "'title': '1Blah blah blah','createdBy': 'PATCHED!','picture': 'http://images6.alphacoders.com/316/316963.jpg'}]}}";
                StringEntity entity = new StringEntity(patchString, "UTF-8");
                entity.setContentType("application/json");
                httpPatch.setEntity(entity);
                HttpResponse response = httpClient.execute(httpPatch);
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == 200 ? true : false) {
                    // ok
                    System.out.println("patch complete");
                } else {
                    System.out.println(response.getStatusLine());
                }

            }
        }.run(nonBlock, exceptionHandling);

    }

Url + メソッドが Advanced Rest クライアントで機能することを確認しましたが、私の Spring ブート プロジェクトが同じ出力を得られない理由がわかりません。どんな助けも大歓迎です。

4

1 に答える 1

1

パッチステートメントに問題はありません。私のJSONが間違っていたというだけです。@DaveSyer のおかげで、私の視野が狭くなりました (方法、Patch red に焦点を当てています)。

Firebaseは次のように書いています:

エラー条件

  • このような状況では、Firebase REST API はエラー コードを返します。

  • HTTPS ではなく HTTP を介して行われたリクエストは、HTTP ステータス コード 404 Not Found になります。

  • PUT または POST データを解析できないと、HTTP ステータス コード 400 Bad Request が返されます

  • PUT または POST データが欠落している場合、HTTP ステータス コード 400 Bad Request が発生します。

  • 大きすぎるデータを PUT または POST しようとすると、HTTP ステータス コード 400 Bad Request が返されます。

  • 名前空間を指定しない REST API 呼び出しは、HTTP ステータス コード 417 Expectation Failed になります。

  • path400 Bad Request の一部として無効な子の名前を含む REST API 呼び出し

  • セキュリティ ルールに違反するリクエストは、HTTP ステータス コード 403 Forbidden になります。

于 2014-03-10T09:58:40.913 に答える