带有@RequestParam和@RequestBody的Spring @GetMapping因HttpMessageNotReadableException而失败
努力尽今夕,少年犹可夸。这篇文章主要讲述带有@RequestParam和@RequestBody的Spring @GetMapping因HttpMessageNotReadableException而失败相关的知识,希望能为你提供帮助。
对端点的请求失败,并显示以下错误:
400错误请求org.springframework.http.converter.HttpMessageNotReadableException:缺少必需的请求正文
@GetMapping
public List<
SomeObject>
list(@RequestParam(required = false) String parameter, @RequestBody String body, @RequestHeader("Authorization") String token) {
.....
}
如果将
@GetMapping
改为@PostMapping
,那么一切都像魅力一样。有什么想法到底是怎么回事?注意:Swagger用于请求发送,因此错误不太可能在Curl中
更新:所以,看起来Spring不支持
@RequestBody
为@GetMapping
。我还是想不通为什么? @DeleteMapping
与@RequestBody
工作正常,根据HTTP / 1.1 GET请求可能包含正文 -stackoverflow.com/questions/978061/http-get-with-request-bodyIMO看起来有点不一致允许在
DELETE
身体,但禁止在GET
答案
@RequestBody
注释使用带注释的变量绑定(POST / PUT)请求体中发送的内容。由于GET请求中没有“body”部分,因此spring抛出HttpMessageNotReadableException来指示相同的内容。作为一般规则,您只能将
@RequestBody
用于具有“正文”内容的请求,例如POST或PUT。另一答案我今天在spring-webmvc 5.1.5中遇到了类似的问题并检查了库代码。
HttpMessageNotReadableException
是从RequestResponseBodyMethodProcessor.readWithMessageConverters
抛出的,因为它引用了readWithMessageConverters
并获得了null。在readWithMessageConverters
中有一个循环为请求Content-Type(for (HttpMessageConverter<
?>
converter : this.messageConverters)
)搜索合适的转换器,并且因为我没有在请求中指定和Content-Type,它失败了。【带有@RequestParam和@RequestBody的Spring @GetMapping因HttpMessageNotReadableException而失败】所以我指定了标题
Content-Type: application/json
并解决了问题。推荐阅读
- 如何在Spring Boot Application中使用JPA删除/ getList
- Xcode 8 App安装失败,出现未知错误
- Ad Hoc发布Xcode 10,App无法正常工作
- 是否有Eclipse的IntelliJ Keymapping插件()
- Android导出(如何创建.keystore文件())
- 在Ruby on Rails中集成Stripe和PayPal付款方式
- 函数式编程简介(JavaScript范例)
- 性能和效率(使用HTTP/3)
- 更轻,更快-Svelte框架指南