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
相关产品推荐
相关产品推荐

