我在 Spring Boot (v2.7.15) 中有以下端点,使用 Java 11 :
@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上失败的curl(但在Tomcat上成功执行):
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\"
}"'
有什么想法吗?预先感谢!
除了@RequestParam 之外,您应该使用@ModelAttribute。这两个注解都是用来绑定HTTP请求参数的,但是它们有一些细微的差别。 @ModelAttribute 适合发送数据。