Как вернуть данные JSON из spring Controller с помощью @ResponseBody

Весенняя версия 4.2.0, Hibernate 4.1.4 Вот мой :

@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company>  listforCompanies() {      
    List<Company> listOfCompanies= new ArrayList<Company>();        
    listOfCompanies = companyManager.getAllCompanies();
    return listOfCompanies;
}

зависимость Jackson JSON mapper в Pom.xml:

    <!-- Jackson JSON Mapper -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
    </dependency>

получение списка в моем ArrayList, но при возврате отображается следующая ошибка:

SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/IrApp] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList] with root cause
    java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList
        at org.springframework.util.Assert.isTrue(Assert.java:68)
        at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:124)

ссылке к примеру, которому я следую.

6 ответов


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

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

я столкнулся с той же проблемой. Я не ставил @ResponseBody Так как я был с помощью @RestController. Но все же я получал ошибку, потому что я не ставил getter/setter метод для класса компании. Так что после сдачи getter/setter моя проблема была решена.


вы также должны быть уверены, что возвращаемый Боб не пуст (и может быть сериализован Джексоном). В моем конкретном случае я попытался вернуть экземпляр объекта без геттеров и сеттеров и без аннотации Джексона и с полями, равными null. Я получил следующее сообщение:

com.fasterxml.jackson.databind.JsonMappingException:
    No serializer found for class com.foo.bar.Baz and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )

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

Я использую Spring boot версии 2.0.


учитывая ответ @Arpit, для меня это сработало только тогда, когда я добавил две зависимости Джексона:

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

и настроен, конечно, веб.в XML <mvc:annotation-driven/>.

оригинальный ответ, который помог мне здесь:https://stackoverflow.com/a/33896080/3014866


в моем случае я использую jackson-databind-2.8.8.jar Это не совместимо с JDK 1.6 Мне нужно использовать, чтобы весна не загружала этот конвертер. Я понизил версию, и теперь она работает.