从 JAVA Spring 创建对 Firebase 的 HTTP.PATCH 请求
Posted
技术标签:
【中文标题】从 JAVA Spring 创建对 Firebase 的 HTTP.PATCH 请求【英文标题】:Create HTTP.PATCH request to firebase from JAVA Spring 【发布时间】:2014-04-10 18:00:51 【问题描述】:问题是JavaHTTPUrlConnection
不支持HTTP.PATCH。
所以我找到了一个使用正文执行删除的指南。但我收到了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 boot 项目没有得到相同的输出,任何帮助将不胜感激。
【问题讨论】:
您能简单地使用 Java SDK for Firebase 吗?如果是这样,可能会让事情变得更简单。 另外,好像有个HttpPatch:hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/… 到底是什么问题?是什么不起作用,有什么症状? @Kato 因为他们的“JAVA SDK”实际上是一个“android SDK”,这意味着它不能在非安卓设备上运行。是的,还有一个 HttpPatch,我也在上面的代码 sn-p 中使用它? 我想您可能需要询问 Firebase 人员 400 是什么意思。如果您使用 Spring 来使用 RestTemplate 而不是原始的HttpClient
,您可能会发现它更容易,但这并不能解释错误的请求。
【参考方案1】:
补丁声明没有错。只是我的 JSON 不正确。 感谢@DaveSyer 让我的狭隘视野(专注于方法,补丁红色。)扩展。
Firebase 写道:
错误情况
Firebase REST API 在这些情况下会返回错误代码。
通过 HTTP 而不是 HTTPS 发出的请求将导致 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 错误请求中包含无效子名称的 REST API 调用
违反安全规则的请求将导致 HTTP 状态代码 403 Forbidden
【讨论】:
以上是关于从 JAVA Spring 创建对 Firebase 的 HTTP.PATCH 请求的主要内容,如果未能解决你的问题,请参考以下文章