#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)}), но размер отсутствует