2017-03-12 22 views
2

spring-boot-starter-webfluxをバージョン2.0.0.BUILD-SNAPSHOTで使用してspring-webflux 5.0.0.BUILD-SNAPSHOTを取得した単純なSpring Bootアプリケーションを作成しました。Spring Webfluxと観測可能な応答が機能しない

@RestControllerを作成し、Flux<String>を返すだけの@GetMappingを指定すると、すべて正常に動作します。

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 

私はジャクソンのObjectMapperは何とかFluxMonoと反応性タイプの残りの部分を登録することが判明したコードを介してビットをデバッグ:私はRxJavaのObservableFluxから変更した場合

はしかし、私はこのエラーを取得しますそのtypeFactoryのため、後でMappingJackson2HttpMessageConverterはそれらを(de) - 直列化する方法を知っています。私はObservableを使用する場合

はしかし、それはそうではないのです。私はタイプObservableまたはObjectMapperのタイプの工場に登録Singleを見つけることができませんので、私は上記のエラーを取得します。

誰でもこの問題を経験しましたか?私はどんな依存関係も見逃していますか? RxJavaの構造から(デ)直列化する方法を手動でジャクソンに伝える必要がありますか?しかし、ジャクソンはなぜFluxとMonoについて知っていますか?

ありがとうございました。

EDITED:私は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)); 
} 
+0

pom/gradleファイルを投稿できますか?どのRxJavaのバージョンを使用していますか?あなたのコントローラのようなコードも追加してください。 –

+0

春のBootがすでに管理しているので 'version'を削除します.RxjavaにReactive.ioとの統合をさせるには' react-streams'拡張が必要です。反応ストリームは異なる反応実装の統合ポイントです。 –

+0

RxJavaのバージョンを削除すると、1.1.8になります。'reactive-streams'依存性(バージョン1.0.0)は依存性' spring-boot-starter-webflux'によって一時的に得られます。いずれにせよ、まだ動作していません。 –

答えて

3

:私たちが頼ることを好む理由は、様々なRxJavaバージョン1.xで

<dependency> 
    <groupId>io.reactivex</groupId> 
    <artifactId>rxjava-reactive-streams</artifactId> 
    <version>1.2.1</version> 
</dependency> 

の変更は、それが困難な私たちは、箱から出して、それをサポートするために作られ、それはですofficial RxJava -> Reactive Streams adapter追加の依存関係を必要とせずにRxJava 2.xがサポートされていることに注意してください(これはReactive Streamの上にネイティブに構築されています)。

Spring WebFlux reference documentationを更新する予定です.RxJava 1.xのサポートが必要です。

+0

Sébastien、私は新しい依存関係をpom.xmlに追加しましたが、同じエラーが発生しています。また、RxJava2を試してみると成功しませんでした。あなたはJacksonにObservable型を「登録」するコードを教えてもらえますか?それで、実際に行われているかどうかを確認できますか?ありがとう。 –

+0

は、これまでのところ、この回避策を使用して: '民間MappingJackson2HttpMessageConverter jackson2HttpMessageConverter(){ \t \t ... \t \t JsonSerializer S =新StdSerializer <観察可能>(真Observable.class、){ \t \t \t @Override \t \t \tます。public voidにserialize( \t \t \t \t \t観察可能 OBS、JsonGenerator jgen、SerializerProvider P。\t \t \t)は反復子(){ \t \t \t \t provider.findValueSerializer( \t \t \t \t \t \t .serialize(obs.blockingIterable()Iterator.class、NULL)にIOException、jgen、p)を投げます。 \t \t \t} \t \t}; \t \t om.registerModule(新しいSimpleModule( "Observable API"、Version.unknownVersion()、Arrays.asList(s))); \t \t return jackson; \t} –

+0

OK今日はもっと深く見ていきます –

-6

ので、春には、発明されていない - ここ症候群を持っているとして、FluxMonoは、春名です。

Springが知っている型に変換するハンドラを登録するか、Jerseyが提供するAsyncResponse機能を使用するか、どこにでも追加することができます。おそらく、それが機能するために、次の依存関係が欠落している

+0

しかし、Springからの公式ドキュメントはObservableとSingleのRxJavaもサポートしていることを明確に述べています。私はそれを動作させることはできません。 –

+1

フレームワークをbashしようとするのではなく、建設的な答えを提供したいと考えています。 (これは本当に質問に答えないので、答えとみなすことができる限り)。 –

+0

@ M.Deinum私は毎日それを使用しています(春を使用した後に社内フレームワークを使用しようとしていることを認識する最も簡単な方法です) - 私はそれが持っているそれ自身の名前空間内に概念を複製する傾向。 –

関連する問題