Подтвердить что ты не робот

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

Spring версия 4.2.0, Hibernate 4.1.4 Вот моя функция Controller:

@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 в 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)

Ссылка в следующем примере.

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Я использую Spring версию для загрузки 2.0.

Ответ 5

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

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

и настроен, причины, web.xml <mvc:annotation-driven/>.

Оригинальный ответ, который мне помог: fooobar.com/questions/144655/...

Ответ 6

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

Ответ 7

Я использовал Groovy + Springboot и получил эту ошибку.

Добавление getter/setter достаточно, если мы используем зависимость ниже.

implementation 'org.springframework.boot:spring-boot-starter-web'

Как основные классы Джексона идут с этим.