基于关于主题“”application/x-www-form-urlencoded“不与@RequestBody一起工作”的多个线程,我尚未成功找到WebFlux Spring应用程序的解决方案。
我有一个WebFlux控制器方法:
@PostMapping(value = "/endpoint", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public Mono<AddRecipientResponse> createRecipient(@RequestBody
final MultiValueMap<String, String> formData,
@RequestHeader
final Map<String, String> headers) {
但是当我发布我的请求时,我得到这个错误:
Could not resolve parameter [0] ... RecipientController.createRecipient(long,org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>,java.util.Map<java.lang.String, java.lang.String>): 415 UNSUPPORTED_MEDIA_TYPE
大多数解决方案依赖于用@RequestParam
替换@RequestBody
。但是这不适用于我的情况。我需要同时拥有@RequestBody
和consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE
。我尝试了以下线程中描述的步骤,但它们都是针对Spring MVC的。
https://stackoverflow.com/a/70148328/18734587
https://stackoverflow.com/a/51160620/18734587
有人知道如何解决WebFlux应用程序的MediaType.APPLICATION_FORM_URLENCODED
和@RequestBody
请求的415 UNSUPPORTED_MEDIA_TYPE错误吗?
2条答案
按热度按时间oprakyz71#
我自己想到了一个解决方案,请求主体从ServerWebExchange.getFormData()中提取出来,如下所示:
jv2fixgn2#
我已经为此挣扎了一个早上。从文档注解
@RequestParam
支持Spring MVC和Spring WebFlux中带注解的处理程序方法,如下所示:
在SpringMVC中,“请求参数”Map到查询参数、表单数据和多部分请求中的部分,这是因为API将查询参数和表单数据组合到一个称为“参数”的Map中,其中包括请求正文的自动解析。
在SpringWebFlux中,“requestparameters”只Map到查询参数,要处理所有的查询、表单数据和多部分数据,可以使用数据绑定到用ModelAttribute注解的命令对象。
然后在尝试使用Spring WebFlux文档中的
@ModelAttribute
后,在文档中实现此功能的唯一方法是:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-form-data
带有注解控制器的Java:
带有注解控制器和协程的Kotlin: