Как реализовать @RequestPart в реактивном, функциональном (не аннотированном) сервисе webflux? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть Spring Boot 2, реактивный веб-сервис webflux, который сохраняет загруженные составные части файла в GridFS MongoDB. Это работает правильно. Сегодня был сделан запрос на включение метаданных для файлов, добавляемых в GridFS. К сожалению, я не смог заставить его работать с моим функциональным / неаннотированным веб-сервисом. Буду признателен за любые предложения или подталкивания в правильном направлении. Вот подробности:

Пример запроса, отправляемого на мою конечную точку:

curl -X "POST" "http://localhost:8080/api/maps" \
     -H 'Content-Type: multipart/form-data; charset=utf-8; boundary=__X_BOUNDARY__'"'"'' \
     -F "files=@animage.jpg" \
     -F "metadata={\"tenantId\":\"598b53702f52f9\",\"projectId\":\"59c0a78d6212dc\"}

Вот мой текущий сервис, который работает без метаданных в запросе выше:

    override fun upload(fluxFileParts: Flux<FilePart>): Flux<Map<String, String>> =

        fluxFileParts
            .flatMap { filePart ->
                reactiveGridFsTemplate.store(
                    filePart.content(),
                    filePart.filename(),
                    kMediaTypeMap.getValue(filePart.filename().getFileExtension())
                )
                    .map { objectId ->
                        mapOf("objectId" to objectId.toHexString())
                    }
            }

По сути, я пытаюсь реализовать что-то вроде следующего. Если бы я использовал аннотации, @RequestPart предоставил бы строго типизированный объект.

override fun uploadWithProjectMetadata(
        fluxFileParts: Flux<FilePart>,
        metadata: SliderUploadMetadata
        //@RequestPart("files") fluxFileParts: Flux<FilePart>,
        //@RequestPart metadata: SliderUploadMetadata
    ): Flux<Map<String, String>>

Буду признателен за вашу помощь ... Я ходил по кругу в течение нескольких часов и не добился никакого прогресса ... Arggg ... разочарование! :)

...