У меня есть следующая подпись для моего контроллера загрузки файлов Micronaut (на Java):
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("application/json")
@Post
public Single<IdType> uploadFile(Publisher<CompletedFileUpload> files)
И у меня есть следующий рабочий тест Spock (в Groovy):
@MicronautTest
class UploadSpecification extends Specification implements CsvFileBuilder {
@Inject
@Client('/')
HttpClient client
@Shared
List<String> allowedMimeTypes = List.of("text/csv", "application/vnd.ms-excel")
@Unroll
void "upload mailings csv with content type #mediaType"() {
given:
MultipartBody multipartBody = MultipartBody
.builder()
.addPart("files", "myfile.csv", new MediaType(mediaType), createCsvAsBytes(buildCsv()))
.build()
when:
HttpResponse response = client.toBlocking()
.exchange(POST("/v1/mailings", multipartBody).contentType(MediaType.MULTIPART_FORM_DATA_TYPE))
then:
response.status == HttpStatus.OK
where:
mediaType << allowedMimeTypes
}
}
Что я хотел бы изменить в тесте: вместо использования стандартного HttpClient
, введенного в верхней части теста, я хотел бы использовать что-то вроде этого:
@Inject
UploadClient uploadClient
@Client(value = "/v1/mailings")
static interface UploadClient {
@Post
HttpResponse postFile(...)
}
У меня вопрос, какая подпись нужна postFile
клиента? Смогу ли я использовать MultipartBody
, но каким-то образом преобразовать его в CompletedFileUpload
? Я действительно не знаю, как это решить, и я новичок, когда дело касается RxJava
.
Любая помощь приветствуется.