Spring Web MVC アプリケーションでのリアクティブ型の JsonView サポートに問題があります。Spring 5 は、WebMvcConfig の ReactiveTypeHandler + taskExecutor 構成でリアクティブ型をサポートします。データは返されますが、JsonView は無視され、すべてのデータがサブスクライバーに渡されます。コード例は次のとおりです。
@JsonView(Views.All.class)
@GetMapping(value = "/items", produces = MediaType.APPLICATION_STREAM_JSON_VALUE )
public Flux<Item> getItems() {
return itemService.getItems();
}
非リアクティブ型の場合、JsonView は JsonViewResponseBodyAdvice を介して org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyAdviceChain#processBody によって処理されます。ただし、リアクティブ型の ReactiveTypeHandler ではトリガーされません。
春のWebリアクティブでは、ServerResponseを介してヒントJackson2CodecSupport.JSON_VIEW_HINTを設定することでjsonビューをサポートできることを知っていますが、このコードは次のとおりです。
@GetMapping(value = "/items", produces = MediaType.APPLICATION_STREAM_JSON_VALUE )
Mono<ServerResponse> getItems() {
return ServerResponse
.ok()
.hint(Jackson2CodecSupport.JSON_VIEW_HINT, Views.All.class)
.body(itemService.getItems(), Item.class);
}
このターゲット タイプの org.springframework.http.converter.GenericHttpMessageConverter#canWrite が false であるため、サポートされていない例外 HttpMediaTypeNotAcceptableException がスローされます。
Web mvc のリアクティブ型に jsonViews メカニズムを使用する方法のヒントやアイデアはありますか? (プロジェクトで Web MVC をリアクティブ Web に変更することはできません。いくつかの要件が原因です) よろしくお願いします :)