我正在尝试创建一个休息客户端。我正在使用Spring。我已经实例化了HttpComponentsClientHttpRequestFactory
,其中使用了org.apache.http.client.HttpClient
。 Maven编译没问题,但是当我运行项目时,我得到了java.lang.ClassNotFoundException: org.apache.http.client.HttpClient.
此外,当我将鼠标指针放在HttpClient导入的顶部时,我得到sun.net.www.http.HttpClient
,它位于rt.jar中,而不是获得org.apache.http.client.HttpClient
。我已经检查过HttpClient确实不存在于任何其他包中。我知道我可以在其他工件中找到org.apache.http.client.HttpClient
,例如
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.0-alpha3</version>
但是,我不确定这是否应该是正确的,因为Spring本身似乎没有采用这种方法(当我检查pom文件中的依赖关系层次结构时,我看不到它。)
无论如何,我想知道为什么org.apache.http.client.HttpClient
之类的导入应该诉诸sun.net.www.http.HttpClient
。我想后者在rt.jar中的事实与HttpClient在运行时不可用有关。
如果你想检查所有这些,这是我的pom文件,它很简单:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xxx.xxx</groupId>
<artifactId>xxx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.5.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
非常感谢。
修改
代码非常简单,您只需要实例化类HttpComponentsClientHttpRequestFactory
。代码更多,但您只需要这样就可以获得异常。
@SpringBootApplication
public class Client {
public static void main(String args[]) {
SpringApplication.run(Client.class);
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
RestTemplate restTemplate = restTemplateBuilder.build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
return restTemplate;
}
答案 0 :(得分:5)
您没有在maven项目依赖项中声明 HttpClient ,因此它不会在您的Classpath上,因此在运行时不可用。
只需添加:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
到你的pom文件,它应该在类路径上可用。 (您不需要指定版本,因为它继承自Spring Boot父pom)。
至于为什么您看到sun.net.www.http.HttpClient
看起来只是您的 IDE 错误地假设HttpClient
的类型,因为它无法访问正确的foreach($fields as $field) {
$message .= "<span style='font-weight:bold;color:#000'>" . $field['text'].":</span><span style='color:#ccc;'>" . htmlspecialchars($field['val'], ENT_QUOTES) . "</span><br>\n";
}
它不在你的类路径上。