Java 8中Apache HttpClient PATCH请求遇TrustAllStrategy类找不到错误求助
使用Apache HttpClient发起PATCH请求时遇到NoClassDefFoundError错误
问题背景
使用Apache HttpClient库通过PATCH方法向REST API提交JSON Payload,Java版本为1.8.0_171。
参考代码片段
try { // 跳过SSL主机名校验并信任所有证书,也可以使用普通HttpClient CloseableHttpClient httpClient = HttpClientBuilder.create().setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, TrustAllStrategy.INSTANCE).build()) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build(); HttpPatch request = new HttpPatch(REST_SERVICE_URL); StringEntity params = new StringEntity(JSON.toJSONString(payload), ContentType.APPLICATION_JSON); request.setEntity(params); request.addHeader(org.apache.http.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); request.addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE); request.addHeader(HttpHeaders.AUTHORIZATION, OAuth2AccessToken.BEARER_TYPE + " " + accessToken); HttpResponse response = httpClient.execute(request); String statusCode = response.getStatusLine().getStatusCode(); } catch (Exception ex) { // 处理异常 }
我的实现代码
import java.util.Base64; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPatch; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.TrustAllStrategy; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.ssl.SSLContextBuilder; public class Connect2Client { public static void main(String[] args) { String url = "https://client.domain.com/client/api/A1234"; String Credentials = "XXXX"; String paylod="[{ \"op\": \"add\", \"path\": \"/progressTrail\", \"value\": \"messageType update\", \"from\" : \"string\" } ]"; try { String returnPayload=connect(url, Credentials, paylod); } catch (Exception e) { // 自动生成的catch块 e.printStackTrace(); } } public static String connect(String url, String Credentials, String data) throws Exception { String resp = null; // 跳过SSL主机名校验并信任所有证书,也可以使用普通HttpClient CloseableHttpClient httpClient = HttpClientBuilder.create().setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, TrustAllStrategy.INSTANCE).build()) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build(); HttpPatch request = new HttpPatch(url); StringEntity params = new StringEntity(data); String authStringEnc = Base64.getEncoder().encodeToString(Credentials.getBytes()); request.setEntity(params); request.addHeader("Content-Type", "application/json-patch+json"); request.addHeader("Authorization", "Basic " + authStringEnc); HttpResponse response = httpClient.execute(request); System.out.println("GET Response Status:: " + response.getStatusLine().getStatusCode()); return resp; } }
已引入的依赖Jar包
- httpclient-4.5.14
- httpcore-4.4.15
运行时抛出的错误
java.lang.NoClassDefFoundError: org/apache/http/conn/ssl/TrustAllStrategy
补充信息
已通过反编译工具确认httpclient jar包中确实存在TrustAllStrategy类,但问题依然存在,求解决该错误的方法。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

