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

Spring Boot @PutMapping处理multipart/form-data在WebLogic上失效求助

Spring Boot 2.7.15(Java 11)PUT接口在WebLogic上解析multipart/form-data失败

接口代码

@PutMapping(value = "/{id}",
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE,
        produces = MediaType.APPLICATION_JSON_VALUE)
public SuggestionResponse updateSuggestion(@PathVariable("id") final Long suggestionId,
                                           @RequestParam("data") @NotEmpty final String data,
                                           @RequestParam(required = false, value = "files") final List<MultipartFile> filesForUpload,
                                           @RequestParam(required = false, value = "titles") final List<String> filesTitles,
                                           @RequestParam(required = false, value = "filesToDelete") final List<Long> filesToDelete)

问题现象

该接口部署在Tomcat服务器上运行正常,但部署到WebLogic服务器后,相同请求直接失败,报错信息如下:

"message": "Failed to parse multipart servlet request; nested exception is javax.servlet.ServletException: The request content-type is not a multipart/form-data"

前置说明

因前端消费者需求,必须使用@RequestParam而非@RequestPart接收参数。已确认请求方发送了Content-Type: multipart/form-data请求头,以下是在WebLogic上执行失败(但Tomcat上成功)的测试curl命令:

curl --location --request PUT 'https://host/test-api/suggestions/281' \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: ••••••' \
--form 'data="{
   \"subject\":\"TEST SUB\",
   \"comments\":\"TEST COM\",
   \"rapporteurName\":\"TEST NAME\"
}"'

解决思路

  • 检查WebLogic的multipart配置:在weblogic.xml中添加<multipart-config>节点,指定文件大小阈值、临时目录等参数,确保WebLogic能正确识别并处理multipart请求。
  • 验证请求Content-Type完整性:手动指定的Content-Type: multipart/form-data缺少boundary参数,虽然curl会自动补充,但WebLogic对请求头格式要求更严格。可尝试去掉手动指定的Content-Type头,让curl自动生成带boundary的完整请求头后重新测试。
  • 调整Spring Boot的multipart解析策略:在配置文件中设置spring.servlet.multipart.enabled=true,并调整spring.servlet.multipart.max-file-size、spring.servlet.multipart.max-request-size等参数,确保Spring的multipart解析器优先于WebLogic的默认处理逻辑。
  • 排查WebLogic过滤器/拦截器:检查WebLogic是否存在系统或自定义拦截器,是否篡改了请求头或请求体,导致Content-Type识别异常。
  • 临时兼容测试:虽要求使用@RequestParam,可尝试临时添加@RequestPart参数绑定(不修改前端请求),测试WebLogic是否能正常解析,以此定位参数绑定层面的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:23:08