[英]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 对象。
在 Spring MVC 中,“请求参数”映射到查询参数、表单数据和多部分请求中的部分。 这是因为 Servlet API 将查询参数和表单数据组合到一个称为“参数”的映射中,其中包括请求正文的自动解析。
您的 curl 命令没有正确格式化“nums”值。 它应该是:
-d '{ "nums":[0,1,3] }'
如果是发布请求,则应使用 @RequestBody 批注。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.