Можно ли делать multipart/related
запросы MIME-типа с помощью Spring WebClient?
Я знаю, что это возможно с помощью FormHttpMessageConverter , но при этом используется RestTemplate, я пытался что-то тренировать с WebClient .
Я не совсем уверен, что это правильный метод, но до сих пор я пытался переопределить getWritableMediaTypes
метод FormHttpMessageWriter , чтобы включить медиатип multipart/related
, и передал экземпляр этого класса в MultipartHttpMessageWriter .
Затем я настроил экземпляр webclient для использования нового экземпляра MultipartHttpMessageWriter
, установив ExchangeStrategies.
class MyFormHttpMessageWriter: FormHttpMessageWriter() {
override fun getWritableMediaTypes(): List<MediaType> {
return listOf(
MediaType("multipart","related"),
MediaType.MULTIPART_FORM_DATA
)
}
}
val parts = MultipartBodyBuilder().apply {
part("file",FileSystemResource("/tmp/sample.txt"))
.header("Content-Disposition","attachment; filename=sample.doc name=file")
.contentType(MediaType.APPLICATION_OCTET_STREAM)
part("metadata",Sample(hash="293e838fb1746703bbdc2333f857b969e8b6b4a95c5ca1dcd85296f1352098ab"))
.header("Content-Disposition","form-data; name=metadata")
.contentType(MediaType.APPLICATION_JSON)
}
.build()
WebClient.builder()
.exchangeStrategies(ExchangeStrategies.builder()
.codecs { clientCodecConfigurer: ClientCodecConfigurer ->
clientCodecConfigurer.customCodecs()
.writer(MultipartHttpMessageWriter(
listOf(
ResourceHttpMessageWriter(),
FormHttpMessageWriter(),
EncoderHttpMessageWriter(CharSequenceEncoder.textPlainOnly())
),
MyFormHttpMessageWriter()
))
}
.build())
.build()
.post()
.uri("http://locahost:8081/1/file/upload")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType("multipart","related"))
.body(BodyInserters.fromMultipartData(parts))
.retrieve()
.bodyToMono(String::class.java)
Но я получаю следующее исключение:
Caused by: org.springframework.core.codec.CodecException: No suitable writer found for part: metadata
at org.springframework.http.codec.multipart.MultipartHttpMessageWriter.encodePart(MultipartHttpMessageWriter.java:299) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: