在JDK8中,HttpURLConnection.java不支持PATCH方法。但为什么?如果服务器使用PATCH方法,我该如何解决这个问题?
/* valid HTTP methods */
private static final String[] methods = {
"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"
};
您可以非常简单地“修复”Java 8 以允许 PATCH 方法,方法是使用反射将“PATCH”的字符串值添加到 HttpURLConnection 的内部数组中,方法如下:
Field methodsField = HttpURLConnection.class.getDeclaredField("methods");
methodsField.setAccessible(true);
Field mods = Field.class.getDeclaredField("modifiers");
mods.setAccessible(true);
mods.setInt(methodsField, methodsField.getModifiers() & ~Modifier.FINAL);
methodsField.set(myHttpURLConnObject, new String[] {"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE", "PATCH"});
之后您应该能够设置修补方法并且它应该可以工作。您还可以使用“myHttpURLConnObject”,它实际上是具有上述代码的 HttpsURLConnection 实例,方法是在“methodsField.set...”行中添加对“HttpURLConnection”的强制转换,而不需要对上述代码进行任何其他更改。