Я только что создал простое приложение Spring Boot, используя spring-boot-starter-webflux с версией 2.0.0.BUILD-SNAPSHOT, которое приносит spring-webflux версии 5.0.0.BUILD-SNAPSHOT и то же самое для Spring Core, Beans, Context и т. Д.
Если я создам простой @RestController
и предоставлю @GetMapping
, который просто возвращает Flux<String>
, тогда все будет работать, как ожидалось.
Однако, если я перейду с Flux
на Observable
RxJava, я получу эту ошибку:
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
Немного отладив код, я обнаружил, что ObjectMapper
Джексона каким-то образом регистрирует Flux
, Mono
и остальные реактивные типы в своем typeFactory, поэтому позже MappingJackson2HttpMessageConverter
знает, как (де) -сериализовать их.
Однако это не тот случай, когда я использую Observable
: я не нахожу тип Observable
или Single
, зарегистрированный в фабрике типов ObjectMapper
, поэтому я получаю вышеупомянутую ошибку.
Кто-нибудь сталкивался с этой проблемой? Мне не хватает зависимости? Нужно ли мне вручную указывать Джексону, как (де) -сериализовать из конструкций RxJava? Но почему Джексон уже знает о Flux и Mono?
Спасибо за вашу помощь.
ИЗМЕНЕНО:
Я использую RxJava 1.2.7. Вот мой pom.xml:
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</dependency>
<!-- RxJava dependeencies -->
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>1.2.7</version>
</dependency>
</dependencies>
А вот пример кода моего контроллера:
/**
* Get all the available tasks.
*
* @return the list of tasks
*/
@GetMapping(path = "/task")
@ResponseStatus(HttpStatus.OK)
public Observable<TaskView> allTasks(@AuthenticationPrincipal LoggedUserVO principal) {
return this.pocComponent.getAllTasks()
.map(t -> ViewConverter.convertFromTaskDocument(t, principal));
}
version
, поскольку Spring Boot уже управляет этим, вам также понадобится расширениеreactive-streams
для rxjava, чтобы сделать его интеграцию с Reactive.io, поскольку реактивные потоки являются точкой интеграции для различных реактивных реализаций. - person M. Deinum   schedule 13.03.2017reactive-streams
(версия 1.0.0) транзитивно получается через зависимостьspring-boot-starter-webflux
. В любом случае все равно не работает. - person Enrique Medina   schedule 13.03.2017