WebClient上传XML文件必须显式设置Content-Type为application/xml或text/xml,否则服务端可能因类型不匹配(如text/plain)导致解析失败或415错误;本地文件推荐用MultipartBodyBuilder流式上传并保留文件名,字符串上传则需配合contentType方法指定类型且确保UTF-8编码一致。

WebClient 上传 XML 文件必须设置 Content-Type
Spring 5 的 WebClient 默认不会自动推断 XML 文件的 Content-Type,如果只用 bodyValue(fileContent),服务端很可能收到 text/plain 或空类型,导致解析失败。必须显式指定为 application/xml 或 text/xml。
- XML 字符串体上传:用
bodyValue+contentType头 - 本地
.xml文件上传:推荐转为DataBuffer流式写入,配合MultipartBodyBuilder - 若后端是 Spring WebFlux 的
@RequestBody String xml接收,Content-Type: application/xml是硬性要求
用 MultipartBodyBuilder 上传 XML 文件(推荐)
这是最贴近真实“文件上传”语义的方式,尤其当后端期望接收 MultipartFile 或 multipart/form-data 格式时。注意:XML 文件名需保留(如 data.xml),否则部分服务端框架无法识别内容类型。
Path xmlPath = Paths.get("src/main/resources/test.xml");
String filename = xmlPath.getFileName().toString();
byte[] xmlBytes = Files.readAllBytes(xmlPath);
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("file", new ByteArrayResource(xmlBytes), MediaType.APPLICATION_XML)
.filename(filename);
WebClient.create()
.post()
.uri("https://api.example.com/upload")
.bodyValue(builder.build())
.header(HttpHeaders.CONTENT_TYPE, builder.build().getHeaders().getContentType().toString())
.retrieve()
.bodyToMono(String.class)
.block();
直接传 XML 字符串(不走 multipart)
适用于后端接受裸 XML body(如 @RequestBody Document 或 String)。此时无需 multipart 封装,但必须确保:
模板采用响应式设计,自动适应手机,电脑及平板显示;满足单一店铺外卖需求。功能:1.菜单分类管理2.菜品管理:菜品增加,删除,修改3.订单管理4.友情链接管理5.数据库备份6.文章模块:如:促销活动,帮助中心7.单页模块:如:企业信息,关于我们更强大的功能在开发中……安装方法:上传到网站根目录,运行http://www.***.com/install 自动
-
Content-Type明确设为application/xml - XML 字符串本身格式合法(UTF-8 编码、无 BOM、根元素闭合)
- 避免用
bodyValue(xmlString)后再手动加 header —— 应该用bodyValue配合contentType方法,否则 header 可能被覆盖
String xmlPayload = ""; WebClient.create() .post() .uri("https://api.example.com/submit") .contentType(MediaType.APPLICATION_XML) .bodyValue(xmlPayload) .retrieve() .bodyToMono(String.class) .block(); 123
常见 415 错误和字符编码陷阱
返回 415 Unsupported Media Type 几乎全是 Content-Type 不匹配导致;而中文乱码或解析异常,则大概率是编码未对齐。Spring WebFlux 默认按 UTF-8 解析,但如果你的 XML 声明写了 encoding="GBK",又没做相应适配,就会出错。
- XML 文件读取时统一用
Files.readAllBytes(path)(字节安全),不要用Files.readString()再转回 bytes - 若 XML 带声明如
,确保实际字节流确实是 UTF-8 编码 -
WebClient不会重写 XML 声明,所以声明里的 encoding 和传输层 encoding 必须一致
DataBufferFactory 分配环节。









