0

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 に変更することはできません。いくつかの要件が原因です) よろしくお願いします :)

4

1 に答える 1