Domanda

Problem is that the Java HTTPUrlConnection does not support HTTP.PATCH.

So I found a guide that did an implementation of delete with with a body. But I'm receiving HTTP/1.1 400 Bad Request

I arrived at this:
* Import compile("org.apache.httpcomponents:httpclient:4.3.1")

Method:

@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);

    }

I'v checked that the Url+method works in Advanced Rest client, can't figure out why my Spring boot project doesn't get the same output, any help will be greatly appreciated.

È stato utile?

Soluzione

There is nothing wrong with the patch statement. It's simply that my JSON was incorrect. All thanks to @DaveSyer for making my narrow sight (focusing on the method, Patch red.) expand.

Firebase have written:

Error Conditions

  • The Firebase REST API will return error codes under these circumstances.

  • A request made over HTTP instead of HTTPS will result in an HTTP status code404 Not Found

  • Unable to parse PUT or POST data will result in an HTTP status code 400 Bad Request

  • Missing PUT or POST data will result in an HTTP status code 400 Bad Request

  • Attempting to PUT or POST data which is too large results in an HTTP status code 400 Bad Request

  • A REST API call that doesn't specify a namespace will result in an HTTP status code 417 Expectation Failed

  • A REST API call that contains invalid child names as part of the path400 Bad Request

  • A request that violates Security Rules will result in an HTTP status code 403 Forbidden

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top