С этим кодом
@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>
Нужно ли мне изменять какие-либо свойства весенней загрузки, чтобы эта работа работала?
Спасибо
java
spring
spring-boot
jackson
Марк
источник
источник
Ответы:
Проблема заключалась в том, что у одного из вложенных объектов
Foo
не было никакихgetter/setter
источник
public
! (Или, если вы, как и я, используете неизменяемые классы, убедитесь, что ваши поляpublic final
не простоfinal
)Добавьте приведенную ниже зависимость к вашему pom.xml:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.0.pr3</version> </dependency>
источник
Добавьте отсутствующий геттер / сеттер внутри bean-компонента, упомянутого в сообщении об ошибке.
источник
Используйте
@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>
источник
org.springframework.boot.autoconfigure.web.HttpMessageConverters
bean-компонент с@Bean
аннотированным методом в свой@SpringBootApplication
класс. Вы можете убедиться в этом, просто прочитавorg.springframework.boot.autoconfigure.web.WebMvcAutoconfiguration
класс, код автоконфигурации загрузки Spring невероятно удобочитаем и часто является самым быстрым способом решения подобных проблемВ моем случае проблема возникла из-за того, что фреймворк Spring не смог получить свойства вложенных объектов. Геттеры / сеттеры - это один из способов решения. Публикация свойств - еще одно быстрое и грязное решение, позволяющее проверить, действительно ли это проблема.
источник
У меня была такая же проблема, и, к сожалению, ее нельзя было решить, добавив методы получения или добавив зависимости Джексона.
Затем я просмотрел официальное руководство Spring и последовал их примеру, приведенному здесь - https://spring.io/guides/gs/actuator-service/, где в примере также показано преобразование возвращенного объекта в формат JSON.
Затем я снова создал свой собственный проект, с той разницей, что на этот раз я также добавил зависимости и подключаемые модули сборки, которые присутствуют в файле pom.xml примера Official Spring Guide, о котором я упоминал выше.
Измененные зависимости и часть сборки XML-файла выглядят так!
Вы можете увидеть то же самое по указанной выше ссылке.
И волшебным образом, по крайней мере для меня, это работает. Итак, если вы уже исчерпали другие варианты, вы можете попробовать это, как это было в случае со мной.
Кстати, у меня не получилось, когда я добавил зависимости в свой предыдущий проект и установил и обновил материалы проекта Maven. Итак, мне снова пришлось делать свой проект с нуля. Я не особо беспокоился об этом, так как мой проект является примером, но вы тоже можете поискать его!
источник
Аннотация @EnableWebMvc в классе конфигурации решила мою проблему. (Spring 5, без web.xml, инициализируется AbstractAnnotationConfigDispatcherServletInitializer)
источник
При использовании Spring Boot 2.2 я сталкиваюсь с похожим сообщением об ошибке, а при поиске в Google сообщение об ошибке
этот вопрос здесь наверху, но все ответы здесь не помогли мне, поэтому я думаю, что было бы неплохо добавить ответ, который я нашел сам:
Мне пришлось добавить следующие зависимости к
pom.xml
:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.11.1</version> </dependency>
После этого мне нужно добавить в класс WebApplication следующее:
@SpringBootApplication public class WebApplication { // ... @Bean public HttpMessageConverter<Object> createXmlHttpMessageConverter() { final MarshallingHttpMessageConverter xmlConverter = new MarshallingHttpMessageConverter(); final XStreamMarshaller xstreamMarshaller = new XStreamMarshaller(); xstreamMarshaller.setAutodetectAnnotations(true); xmlConverter.setMarshaller(xstreamMarshaller); xmlConverter.setUnmarshaller(xstreamMarshaller); return xmlConverter; } }
И последнее, но не менее важное, что
@Controller
я использовал:@GetMapping(produces = {MediaType.APPLICATION_XML_VALUE, MediaType. APPLICATION_JSON_VALUE}) @ResponseBody public List<MeterTypeEntity> listXmlJson(final Model model) { return this.service.list(); }
Итак, теперь я получил возвращаемые значения JSON и XML в зависимости от запросов.
Accept
заголовка .Чтобы сделать вывод XML более читабельным (удалите полное имя пакета из имен тегов), вы также можете добавить
@XStreamAlias
следующее в свой класс сущности:@Table("ExampleTypes") @XStreamAlias("ExampleType") public class ExampleTypeEntity { // ... }
Надеюсь, это поможет другим с той же проблемой.
источник
Некоторое время я получал ту же ошибку. Я проверял, доступны ли методы получения для всех свойств, но все равно получал ту же ошибку. Для решения проблемы Настройте MVC xml (конфигурацию) с помощью
Это необходимо для Spring, чтобы обнаружить присутствие Джексона и настроить соответствующие преобразователи.
источник
Я долгое время сталкивался с одной и той же проблемой, затем узнал, что нужно преобразовать объект в JSON с помощью Object Mapper и передать его как объект JSON
@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; }
источник
у вас не было никаких методов получения / установки.
источник
Ответ, написанный @Marc, также действителен. Но конкретный ответ -
Getter
метод необходим. Вам даже не нуженSetter
.источник
Я также столкнулся с такой ошибкой, когда случайно поместил две одинаковые строки @JsonProperty ("some_value") в разные свойства внутри класса
источник
В моем случае я забыл добавить библиотеку jackson-core.jar, я добавил только jackson-annotations.jar и jackson-databind.jar. Когда я добавил jackson-core.jar, проблема устранилась.
источник
Я видел ту же ошибку, когда для области
jackson-databind
зависимости было установлено значениеtest
:<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9</version> <scope>test</scope> </dependency>
Удаление
<scope>
строки устранило проблему.источник
Недавно столкнулся с такой же ошибкой - у pojo были геттеры / сеттеры, и все зависимости Джексона были импортированы в pom правильно, но каким-то образом "<scope>" был "предоставлен" для зависимости Джексона, и это вызвало проблему. Удаление "<Scope>" из зависимости Джексона устранило проблему.
источник
Я столкнулся с той же проблемой, но я использовал Lombok, а мой Pojo UploadFileResponse был конструктором.
public ResponseEntity<UploadFileResponse>
Чтобы решить эту проблему, я добавил аннотацию @Getter:
@Builder @NoArgsConstructor @AllArgsConstructor @Getter public class UploadFileResponse
источник
В моем случае я использую весеннюю загрузку, и я столкнулся с аналогичной ошибкой:
No converter for [class java.util.ArrayList] with preset Content-Type 'null'
оказывается, что у меня есть контроллер с
@GetMapping(produces = { "application/xml", "application/json" })
и, к сожалению, я не добавлял
Accept
заголовок к своим запросамисточник
В моем случае я возвращал Boolean в Response Entity и имел:
Когда я изменил его на ниже
Это сработало!
Пример того, что у меня было.
@PostMapping(value = "/xxx-xxxx", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Boolean> yyyy(
источник
Добавьте ниже зависимость в pom.xml:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.10.1</version> </dependency>
Столкнулся с той же проблемой, что и тип возвращаемого значения не может быть привязан к MediaType класса Foo. После добавления зависимости все заработало.
источник