补丁请求使用 Spring 启动 Java
Patch Request using 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 内部服务器错误
在 Spring 上:
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())
我的 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 内部服务器错误
在 Spring 上:
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())