java - 使用 Spring Boot Java 的补丁请求
问题描述
我的 OpenShift Api 补丁请求有问题。这是我的实际代码:
public static HttpStatus PatchHTTPRequestCustomHeaders(String url, String data) {
String Bearer = "ayJhbGciOiJSUzI1NiIs...";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer "+Bearer);
headers.set("X-HTTP-Method-Override", "PATCH");
headers.set("Content-Type", "application/json-patch+json");
headers.set("Accept", "application/json");
final HttpEntity<String> entity = new HttpEntity<String>(data, headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class, 1);
if(response.getStatusCode() == HttpStatus.OK) {
return HttpStatus.OK;
}else {
return null;
}
}
数据包含一个op replace or add or remove ...
PostMan 上的错误:500 内部服务器错误
在春天:
2020-02-14 10:12:28.918 ERROR 14944 --- [nio-8169-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException$MethodNotAllowed: 405 Method Not Allowed: [{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"the server does not allow this method on the requested resource","reason":"MethodNotAllowed","details":{},"code":405}
]] with root cause
org.springframework.web.client.HttpClientErrorException$MethodNotAllowed: 405 Method Not Allowed: [{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"the server does not allow this method on the requested resource","reason":"MethodNotAllowed","details":{},"code":405}
]
我在 PHP 中的补丁没有任何问题...
我希望有人知道发生这种情况的原因。
编辑 :
public static void disableSSLCertificateChecking() {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// Not implemented
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// Not implemented
}
} };
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
解决方案
发送补丁请求时我遇到了同样的问题。这是解决方案:
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory())
推荐阅读
- azure-cosmosdb - 图形库无法解析具有现有文档库集合的简单数组属性
- c# - 使用 c# 与 microsoft exchange 服务建立连接
- java - Mockito:在使用@InjectMocks 时模拟被测试方法调用的同一类的方法
- javascript - 在 Internet Explorer 中使用什么来代替 cloneNode()?
- sql - 在结果下方排序的最佳方法是什么
- javascript - 有时 firebase.auth().onAuthStateChanged 在我刷新页面时返回 null 用户
- c# - 在 List 中找到对应的项
- ruby-on-rails - 如何在生产模式下启动工头(ENV)
- angularjs - 将 AngularJS 工厂注入控制器时出现未知的提供程序错误
- angular - 我怎样才能返回一个承诺?