Исключение HttpMessageNotWritableException при возврате Mono для типа содержимого ‘multipart /form-data в Webflux

#spring #spring-boot #spring-mvc #multipartform-data #spring-webflux

#spring #spring-boot #spring-mvc #multipartform-data #spring-webflux

Вопрос:

Я пытаюсь вернуть Mono в API, который используется для загрузки файла.

Это сигнатура метода.

 @PatchMapping(value = {"/uploadDoc},
              consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}
              produces = {MediaType.APPLICATION_STREAM_JSON_VALUE,
                      MediaType.APPLICATION_JSON_VALUE})
Mono<MyObject> uploadDocument(@PathVariable("id") String id, @RequestPart("file") FilePart filePart);
  

Когда я возвращаю Mono<Void> или Mono<String> , он работает нормально. Но, когда я возвращаю поток моего пользовательского объекта Mono<MyObject> , я получаю приведенную ниже ошибку.

 org.springframework.http.converter.HttpMessageNotWritableException: No Encoder for [com.MyObject] with preset Content-Type 'multipart/form-data;boundary=--------------------------127221087502764453476151'
    at org.springframework.web.reactive.result.method.annotation.AbstractMessageWriterResultHandler.writeBody(AbstractMessageWriterResultHandler.java:172)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
  

Остальной части трассировки стека.

 Stack trace:
        at org.springframework.web.reactive.result.method.annotation.AbstractMessageWriterResultHandler.writeBody(AbstractMessageWriterResultHandler.java:172)
        at org.springframework.web.reactive.result.method.annotation.AbstractMessageWriterResultHandler.writeBody(AbstractMessageWriterResultHandler.java:107)
        at org.springframework.web.reactive.result.method.annotation.ResponseBodyResultHandler.handleResult(ResponseBodyResultHandler.java:86)
        at org.springframework.web.reactive.DispatcherHandler.handleResult(DispatcherHandler.java:169)
        at org.springframework.web.reactive.DispatcherHandler.lambda$handle$2(DispatcherHandler.java:147)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
        at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241)
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
        at reactor.core.publisher.MonoIgnoreThen$ThenAcceptInner.onNext(MonoIgnoreThen.java:296)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
  

Я что-то здесь упускаю? Почему я не могу вернуть объект при загрузке файловой части?

Комментарии:

1. Любые предложения о том, как решить эту проблему

2. Я не смог найти обходной путь, так что нет.