问题
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.
回答1:
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
来源:https://stackoverflow.com/questions/22252636/create-http-patch-request-to-firebase-from-java-spring