我正在编写一个Java应用程序,在其中我使用HttpURLConnection调用一项REST API补丁操作。我知道HttpURLConnection不支持PATCH操作。
我尝试了另一个问题HttpURLConnection Invalid HTTP method: PATCH
中提到的其他建议但是,对我没有任何帮助。
解决方案1:
conn.setRequestProperty(“ X-HTTP-Method-Override”,“ PATCH”); conn.setRequestMethod(“ POST”);
无法在我的开发服务器上工作。
解决方案2:
private static void allowMethods(String... methods) {
try {
Field methodsField = HttpURLConnection.class.getDeclaredField("methods");
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(methodsField, methodsField.getModifiers() & ~Modifier.FINAL);
methodsField.setAccessible(true);
String[] oldMethods = (String[]) methodsField.get(null);
Set<String> methodsSet = new LinkedHashSet<>(Arrays.asList(oldMethods));
methodsSet.addAll(Arrays.asList(methods));
String[] newMethods = methodsSet.toArray(new String[0]);
methodsField.set(null/*static field*/, newMethods);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
上述解决方案有效,,但是foritfy报告了setAccessible()方法的问题。我们可以在生产中使用setAccessible()方法吗?我的意思是上述解决方案将在生产环境中工作。
无论如何,我可以使用HttpURLConnection实现Patch操作。请提出建议。