You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Reactive WebClient PUT请求体传CSV文件遇媒体类型不支持异常

解决WebClient PUT CSV文件时的UnsupportedMediaTypeException问题

核心错误原因

你错误地使用了bodyValue()方法传递BodyInserter实例。bodyValue()用于直接传入请求体对象(比如String、POJO等),而BodyInserter需要通过专门的body()方法传入。这导致WebClient试图将BodyInserter本身作为请求体对象去序列化,找不到对应的编解码器,从而抛出异常。

修正后的代码

直接将bodyValue()替换为body()方法即可解决核心问题:

Resource resource = new PathResource(Path.of("file.txt"));
assert resource.exists(); // true
assert resource.isReadable(); // true

this.webClient
    .put()
    .uri(location)
    .contentType(WebClientConfiguration.MEDIA_TYPE_TEXT_CSV) // new MediaType("text", "csv")
    .body(BodyInsertors.fromResource(resource)) // 改用body()方法传入BodyInserter
    .retrieve()
    .toBodilessEntity();

编解码器补充配置(若仍有问题)

如果修正方法后依然出现媒体类型不支持的问题,可在构建WebClient时显式配置支持text/csv的编解码器:

WebClient webClient = WebClient.builder()
    .codecs(codecConfigurer -> {
        // 确保Resource编码器被注册(Spring默认已包含,自定义配置时需显式添加)
        codecConfigurer.defaultCodecs().resourceEncoder(new ResourceEncoder());
        // 配置String解码器支持所有MIME类型,包括text/csv
        codecConfigurer.defaultCodecs().stringDecoder(StringDecoder.allMimeTypes());
    })
    .build();

ResourceEncoder默认支持所有媒体类型,能直接将Resource对象按指定的Content-Type输出,满足text/csv的传输要求。

内容的提问来源于stack exchange,提问作者KonradK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:48:20