猿问

在 Spock 测试中使用 @Client 在 Micronaut 中进行 HTTP 多部分文件上传

的 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。


任何帮助表示赞赏。


蝴蝶刀刀
浏览 117回答 1
1回答

三国纷争

请尝试以下操作:@Client(value ="/v1/upload")static interface UploadClient {&nbsp; @Post(uri = "/mailings", produces = MediaType.MULTIPART_FORM_DATA)&nbsp; HttpResponse postFile(@Body MultipartBody file)}添加产品和正文注释
随时随地看视频慕课网APP

相关分类

Java
我要回答