ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

Я полностью новичок в 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.MappingJacksonHttpMessageConverte‌​‌​r"/>
            </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>

parent 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[email protected]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.MappingJacksonHttpMessageConverte‌​‌​r#77624896' of type [org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌​‌​r] while setting bean property 'messageConverters' with key [0]; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌​‌​r] for bean with name 'org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌​‌​r#77624896' defined in class path resource [rest-client-context.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌​‌​r
...
Caused by: java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌​‌​r

У меня есть это исключение, когда я пытаюсь запустить основной метод из eclipse.
Я могу думать о чем-то вроде Spring банки не видно, но я не знаю, почему... Можете ли вы мне помочь?

Ответ 1

Я попытался скопировать в ваш проект spring beans проект, но что-то странное в

<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌​‌​r"/>

эта строка, в частности, кажется, что некоторые невидимые символы перед последним r в Converter попробуйте снова ввести это имя класса вручную.

Если это так, то это самая сумасшедшая вещь, которую я видел когда-то: D

Также MappingJacksonHttpMessageConverter устарел в 4.0.0, есть что-то более новое. И вам нужно будет добавить зависимости для джексона, чтобы заставить все работать. Это должно быть полезно.

Ответ 2

Первая основная версия Jackson больше не поддерживается в Spring 4. Класс, который вы хотите использовать, теперь org.springframework.http.converter.json.MappingJackson2HttpMessageConverter. Убедитесь, что у вас есть com.fasterxml.jackson.core/jackson-core/2.x.x в вашем пути к классам.

Ответ 3

Я столкнулся с такой же проблемой. Исправлено с помощью org.springframework.http.converter.json.MappingJackson2HttpMessageConverter вместо org.springframework.http.converter.json.MappingJacksonHttpMessageConverte‌r

Ответ 4

У меня была проблема, исправлена ​​ее добавлением следующих зависимостей в 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>

Нашел здесь!

Ответ 5

Программно вы можете сделать свою конфигурацию следующим образом:

public class AppConfiguration {

   ...
    @Bean
    public HttpMessageConverters customConverters() {
        HttpMessageConverter<?> jacksonMessageConverter = new MappingJackson2HttpMessageConverter();
//        HttpMessageConverter<?> another = ...
        return new HttpMessageConverters(jacksonMessageConverter);
    }
}

Ответ 6

Вам нужно добавить следующее к вашему pom.xml(не parent pom.xml)

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
</dependencies>

Ответ 7

<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>

это сработало для меня