Как вернуть данные 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
Мне нужно использовать, чтобы весна не загружала этот конвертер. Я понизил версию, и теперь она работает.