繁体   English   中英

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

[英]POST call accepts x-www-form-urlencoded but refuses JSON

我正在尝试进行POST调用。
我的身体只有一个参数,所以我只想使用@RequestParam来读取它。
代码

    @RequestMapping(value = "/call", method = RequestMethod.POST)
    @ResponseBody
    public void doStuff(@RequestParam List<Integer> nums,
                                   HttpServletResponse response) {

使用x-www-form-urlencoded的调用工作正常-

curl -X POST https://localhost:9002/call

-H '授权:承载 d1436121-25f7-4162-b0d4-7699d4acf147'
-H '内容类型:应用程序/x-www-form-urlencoded'
-H '主机:本地主机: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 '内容类型:应用程序/json'
-H '主机:本地主机:9002'
-d '{ "nums":[0,1,3] }'

错误

{ "errors": [ { "message": "Leider ist ein Fehler aufgetreten.", "type": "MissingServletRequestParameterError" } ] }

为什么它接受x-www-form-urlencoded但拒绝JSON

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

来自https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

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

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

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

如果是发布请求,则应使用 @RequestBody 批注。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM