Spring Boot @PutMapping 消耗多部分/表单数据不起作用

问题描述 投票:0回答:1

我在 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\"
}"'

有什么想法吗?预先感谢!

java spring spring-boot weblogic multipartform-data
1个回答
0
投票

除了@RequestParam 之外,您应该使用@ModelAttribute。这两个注解都是用来绑定HTTP请求参数的,但是它们有一些细微的差别。 @ModelAttribute 适合发送数据。

© www.soinside.com 2019 - 2024. All rights reserved.