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

我正在尝试打电话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。



慕田峪4524236
浏览 112回答 3
3回答

米琪卡哇伊

您的curl 命令未正确格式化“nums”值。它应该是:-d&nbsp;'{&nbsp;"nums":[0,1,3]&nbsp;}'

青春有我

@RequestParam您只能与 URL 查询参数、表单数据或多部分负载一起使用。如果您想使用 JSON 有效负载,则应使用@RequestBody注释并将该 JSON 映射到 Java 对象。在 Spring MVC 中,“请求参数”映射到查询参数、表单数据和多部分请求中的部分。这是因为 Servlet API 将查询参数和表单数据组合到一个称为“参数”的映射中,其中包括请求正文的自动解析。

杨__羊羊

如果是 post 请求,您应该使用 @RequestBody 注释。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java