it-swarm.com.ru

java.lang.IllegalArgumentException: не найдено преобразователя для возвращаемого значения типа

С этим кодом

@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
    public ResponseEntity<foo> foo() {

        Foo model;
        ...
        return ResponseEntity.ok(model);
    }
}

Я получаю следующее исключение

Java.lang.IllegalArgumentException: No converter found for return value of type

Я предполагаю, что объект не может быть преобразован в JSON, потому что Джексон отсутствует. Я не понимаю почему, потому что я думал, что Джексон был встроен с пружинной загрузкой.

Затем я попытался добавить Джексона в pom.xml, но у меня все еще та же ошибка

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.3</version>
</dependency>

Нужно ли менять какие-либо свойства пружинной загрузки, чтобы это работало?

Спасибо

56
Marc

Проблема заключалась в том, что один из вложенных объектов в Foo не имел никакого getter/setter

150
Marc

Добавьте приведенную ниже зависимость в ваш pom.xml:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.1</version>
</dependency>
14
PAA

Используйте @ResponseBody и getter/setter. Надеюсь, это решит вашу проблему.

@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<foo> foo() {

и обновите свой mvc-dispatcher-servlet.xml:

<mvc:annotation-driven>
     <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
   </mvc:message-converters>
</mvc:annotation-driven>
5
SkyWalker

Добавьте отсутствующий метод получения/установки в компонент, упомянутый в сообщении об ошибке.

4
Soumyajit Swain

У меня была та же самая проблема, и, к сожалению, она не могла быть решена путем добавления методов получения или добавления зависимостей Джексона.

Затем я посмотрел на Официальное руководство по Spring и последовал их примеру, приведенному здесь - https://spring.io/guides/gs/actuator-service/ -, где в примере также показано преобразование возвращенного объекта в формат JSON ,.

Затем я снова создал свой собственный проект, с той разницей, что на этот раз я также добавил зависимости и плагины сборки, которые присутствуют в файле pom.xml в примере с Официальным руководством по Spring, о котором я упоминал выше.

Измененные зависимости и часть сборки файла XML выглядят так!

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Вы можете увидеть то же самое в упомянутой ссылке выше.

И по волшебству, по крайней мере для меня, это работает. Так что, если вы уже исчерпали свои другие варианты, вы можете попробовать это, как было со мной.

Просто примечание: у меня не получилось, когда я добавил зависимости в свой предыдущий проект и установил и обновил Maven. Итак, мне пришлось снова сделать свой проект с нуля. Я не особо беспокоился об этом, так как мой примерный проект, но вы, возможно, захотите посмотреть и на него!

3
thisisashwani

Проблема возникла в моем случае, потому что Spring Framework не может получить свойства вложенных объектов. Getters/Setters является одним из способов решения. Обнародование свойств - еще одно быстрое и грязное решение для проверки, если это действительно проблема.

2
vish213

Некоторое время я получал ту же ошибку. Я должен был убедиться, что методы получения были доступны для всех свойств. До сих пор получала ту же ошибку . Чтобы решить проблему, настройте MVC xml (конфигурацию) с 

 <mvc:annotation-driven/>

Это необходимо для Spring, чтобы обнаружить присутствие Джексона и настроить соответствующие преобразователи.

1
Nilay

В моем случае я забыл добавить библиотеку jackson-core.jar, я добавил только jackson-annotations.jar и jackson-databind.jar. Когда я добавил jackson-core.jar, проблема была исправлена.

0
Lisa

Я также столкнулся с такой ошибкой, когда случайно поместил две одинаковые строки @JsonProperty ("some_value") в разные свойства внутри класса

0
Vit Ias

Аннотация @EnableWebMvc для класса config решила мою проблему. (Spring 5, нет web.xml, инициализировано AbstractAnnotationConfigDispatcherServletInitializer)

0
user3636486

Я долгое время сталкивался с той же проблемой, а затем узнал, что нужно преобразовать объект в JSON с помощью Object Mapper и передать его как JSON Object  

@RequestMapping(value = "/getTags", method = RequestMethod.GET)
public @ResponseBody String getTags(@RequestParam String tagName) throws
        JsonGenerationException, JsonMappingException, IOException {
    List<Tag> result = new ArrayList<Tag>();
    for (Tag tag : data) {
        if (tag.getTagName().contains(tagName)) {
            result.add(tag);
        }
    }
    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(result);
    return json;
}
0
Kiran Kawade