私は完全にSpringの初心者です(私のコードでそれを見ることができます:))。クラスRestTemplateをテストしたかったのですが、ClassNotFoundException
を取得しました。
したがって、コードは次のとおりです。
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.client.RestTemplate;
public class RestClient {
private RestTemplate restTemplate;
public String getJiraIssueAsJson(){
Object o = restTemplate.getForObject(..., Object.class);
System.out.println("..."+o.getClass());
return null;
}
public void setRestTemplate(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("rest-client-context.xml");
RestClient restClient = context.getBean("restClient", RestClient.class);
restClient.getJiraIssueAsJson();
}
}
context.xml
<beans ...>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="restClient" class="org.googlecode.happymarvin.jiraexplorer.RestClient">
<property name="restTemplate" ref="restTemplate"/>
</bean>
</beans>
pom.xml
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.googlecode.happymarvin</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>jiraminer</artifactId>
<name>Happy Marvin JIRA Miner</name>
<packaging>jar</packaging>
<url>http://maven.Apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jackson-version>1.9.13</jackson-version>
</properties>
</project>
親pom.xml
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.happymarvin</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Happy Marvin parent project</name>
<url>http://maven.Apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.springframework.version>4.0.0.RELEASE</org.springframework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version>
</dependency>
</dependencies>
</project>
例外
Jan 07, 2014 10:18:24 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@730eb2f0: startup date [Tue Jan 07 10:18:24 GMT 2014]; root of context hierarchy
Jan 07, 2014 10:18:24 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [rest-client-context.xml]
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'restTemplate' defined in class path resource [rest-client-context.xml]: Cannot create inner bean 'org.springframework.http.converter.json.MappingJacksonHttpMessageConverter#77624896' of type [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter] while setting bean property 'messageConverters' with key [0]; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter] for bean with name 'org.springframework.http.converter.json.MappingJacksonHttpMessageConverter#77624896' defined in class path resource [rest-client-context.xml]; nested exception is Java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
...
Caused by: Java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
Eclipseからmainメソッドを実行しようとすると、この例外が発生します。
春が見えないようなものを考えることはできますが、その理由はわかりません...助けてくださいませんか?
私はあなたの春豆をプロジェクトに貼り付けてコピーしようとしましたが、奇妙なことが間違っています
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
この行、特にr
の最後のConverter
の前に不可視の文字があるようです。そのクラス名を手動でもう一度入力してください。
これが事実なら、それは私がしばらく見た中で最もクレイジーなことです:D
また、MappingJacksonHttpMessageConverter
は4.0.0で非推奨になり、新しい機能が追加されました。また、物事を機能させるには、jacksonの依存関係も追加する必要があります。 これ が役立つはずです。
Jacksonの最初のメジャーバージョンは、Spring 4ではサポートされなくなりました。使用したいクラスはorg.springframework.http.converter.json.MappingJackson2HttpMessageConverter
。クラスパスにcom.fasterxml.jackson.core/jackson-core/2.x.xがあることを確認してください。
同じ問題に直面しました。 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
の代わりにorg.springframework.http.converter.json.MappingJacksonHttpMessageConverter
を使用して修正
私は問題を抱えていましたが、pom.xmlに次の依存関係を追加して修正しました
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
それを見つけました ここ !
以下をpom.xmlに追加する必要があります(親pom.xmlではありません)
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
</dependencies>
プログラムで次のように設定を行うことができます。
public class AppConfiguration {
...
@Bean
public HttpMessageConverters customConverters() {
HttpMessageConverter<?> jacksonMessageConverter = new MappingJackson2HttpMessageConverter();
// HttpMessageConverter<?> another = ...
return new HttpMessageConverters(jacksonMessageConverter);
}
}