gpt4 book ai didi

java - 在 Spock 测试中使用 @Client 在 Micronaut 中进行 HTTP 分段文件上传

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:15 25 4
gpt4 key购买 nike

我的 Micronaut 文件上传 Controller (使用 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
}
}

关于测试我想改变的是:我不想使用在测试顶部注入(inject)的标准 HttpClient,我想使用这样的东西:

@Inject
UploadClient uploadClient

@Client(value = "/v1/mailings")
static interface UploadClient {

@Post
HttpResponse postFile(...)
}

我的问题是,客户端的postFile需要什么签名?我是否仍然可以使用 MultipartBody,但以某种方式将其转换为 CompletedFileUpload?我真的不确定如何解决这个问题,而且我是 RxJava 的初学者。

感谢任何帮助。

最佳答案

请尝试以下操作:

@Client(value ="/v1/upload")
static interface UploadClient {

@Post(uri = "/mailings", produces = MediaType.MULTIPART_FORM_DATA)
HttpResponse postFile(@Body MultipartBody file)

}

添加产品和正文注释

关于java - 在 Spock 测试中使用 @Client 在 Micronaut 中进行 HTTP 分段文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55060793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com