Преобразовать Publisher в Maybe<HttpResponse>

#java #rx-java #rx-java2 #reactivex #rx-java3

#java #rx-java #rx-java2 #реактивекс #rx-java3

Вопрос:

У меня есть следующий метод

 public Maybe<HttpResponse<?>> post(Publisher<CompletedFileUpload> files) {
        MultipartBody.Builder requestBody = MultipartBody.builder();
        return Flowable.fromPublisher(files).flatMap(file -> {
            requestBody
                    .addPart("file", file.getFilename(), MediaType.TEXT_PLAIN_TYPE, file.getBytes())
                    .addPart("id", "asdasdsds");
            return this.iProductClient.post(requestBody.build());
        });
    }
 

Возвращаемый тип from this.iProductClient.post(requestBody.build()); равен Maybe<HttpResponse<?>>

Как я могу преобразовать приведенный ниже код в return Maybe<HttpResponse<?>> , в настоящее время приведенный ниже метод имеет ошибку

 return Flowable.fromPublisher(files).flatMap(file -> {
            requestBody
                    .addPart("file", file.getFilename(), MediaType.TEXT_PLAIN_TYPE, file.getBytes())
                    .addPart("id", "asdasdsds");
            return this.iProductClient.post(requestBody.build());
        });
 

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

1. Предположительно, у вас есть несколько файлов и, следовательно, несколько Maybe файлов. Как их следует превратить в единое Maybe целое с точки зрения логики?

2. @akarnokd по сути, я хочу зациклить все файлы и добавить в MultipartBody и вызвать это. iProductClient.post(RequestBody.build()). Однако возвращаемый тип метода post, возможно, <HttpResponse<?>> . Таким образом, мне нужно вернуться, может быть

Ответ №1:

Вы можете использовать collect , а затем flatmap при отправке запроса:

 return Flowable.fromPublisher(files)
    .collect(MultipartBody::builder, (requestBody, file) -> {
        requestBody
            .addPart("file", file.getFilename(), MediaType.TEXT_PLAIN_TYPE, file.getBytes())
            .addPart("id", "asdasdsds");
    })
    .flatMapMaybe(requestBody -> iProductClient.post(requestBody.build()))
    ;
 

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

1. Есть ли какой-либо способ на flatMapMaybe(RequestBody -> iProductClient.post(RequestBody.build())) проверить, был ли добавлен AddPart или нет в RequestBody?

2. Какие свойства MultipartBody имеет?

3. Не нашел таких свойств для проверки. Он имеет методы build, addpart

4. square.github.io/okhttp/4.x/okhttp/okhttp3/-multipart-body/size

5. ну, я попробовал flatMapMaybe(RequestBody -> { if(RequestBody.size)}), но размер отсутствует