为了账号安全,请及时绑定邮箱和手机立即绑定

POST 调用接受 x-www-form-urlencoded 但拒绝 JSON

POST 调用接受 x-www-form-urlencoded 但拒绝 JSON

慕田峪4524236 2023-07-19 16:36:18
我正在尝试打电话POST。我的身体只有一个参数,所以我想简单地使用@RequestParam.代码:    @RequestMapping(value = "/call", method = RequestMethod.POST)    @ResponseBody    public void doStuff(@RequestParam List<Integer> nums,                                   HttpServletResponse response) {通话x-www-form-urlencoded效果很好-卷曲 -X POST https://localhost:9002/call-H '授权:承载 d1436121-25f7-4162-b0d4-7699d4acf147'-H '内容类型:application/x-www-form-urlencoded'-H '主机:localhost:9002'-d nums=0%2C1% 2C3但使用 JSON 进行同样的调用会失败。代码:        @RequestMapping(value = "/call", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)        @ResponseBody        public void doStuff(@RequestParam List<Integer> nums,                                       HttpServletResponse response) {呼叫application/json失败-curl -X POST https://localhost:9002/call-H '授权:承载 d1436121-25f7-4162-b0d4-699d4acf147'-H '内容类型:application/json'-H '主机:localhost:9002'- d '{ "nums":[0,1,3] }'错误:{ "errors": [ { "message": "抱歉,发生错误。", "type": "MissingServletRequestParameterError" } ] }为什么它接受x-www-form-urlencoded却又拒绝JSON。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

您的curl 命令未正确格式化“nums”值。它应该是:

-d '{ "nums":[0,1,3] }'


查看完整回答
反对 回复 2023-07-19
?
青春有我

TA贡献1784条经验 获得超8个赞

@RequestParam您只能与 URL 查询参数、表单数据或多部分负载一起使用。如果您想使用 JSON 有效负载,则应使用@RequestBody注释并将该 JSON 映射到 Java 对象。

在 Spring MVC 中,“请求参数”映射到查询参数、表单数据和多部分请求中的部分。这是因为 Servlet API 将查询参数和表单数据组合到一个称为“参数”的映射中,其中包括请求正文的自动解析。


查看完整回答
反对 回复 2023-07-19
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

如果是 post 请求,您应该使用 @RequestBody 注释。



查看完整回答
反对 回复 2023-07-19
  • 3 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信