【问题标题】:post json to spring mvc controller将 json 发布到 spring mvc 控制器
【发布时间】:2012-10-03 11:04:00
【问题描述】:

控制器签名(我也尝试过作为 requestbody):

@RequestMapping(value = "/Lame", method = RequestMethod.POST)
public
@ResponseBody
boolean getLame(@RequestParam String strToMatchA, @RequestParam String strToMatchB) {}

这是我的 json :

{
"strToMatchA": "EN",
 "strToMatchB": "lon"
}

不工作,我收到错误:

org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'strToMatchA' is not present

从方法签名中删除第一个参数然后使其工作(该方法被正确调用),我应该做什么?

当我更改方法参数以使用@RequestBody 进行注释时,我收到以下错误:

java.io.IOException: Stream closed

【问题讨论】:

  • 您是否在启用调试的情况下进行编译?否则,您的参数名称将不可用。
  • @DavidGrant RequestParam 将采用方法签名中定义的参数名称。但我也尝试过手动指定名称
  • 您使用哪个库进行对象映射?是杰克逊还是别的什么?它在类路径上吗?另外,RESTFul控制器的请求方法基本上应该是GET而不是POST
  • @Lion jackson,它适用于一个参数。你说的 Restful api 应该只使用 GET 吗?值得商榷:stackoverflow.com/q/11522946/106261
  • 所以我的 json 对每个人来说都是正确的?

标签: java javascript json spring spring-mvc


【解决方案1】:

你的 json 很好,但控制器签名不行。 使用匹配 json 的设置器创建一个类。 使用它作为参数而不是你的字符串。 用 requestbody 注释它。它应该工作。

【讨论】:

  • 没有别的办法了吗?我假设 spring 可以处理多个请求参数?
  • 它可以但不是请求参数,您所拥有的是请求的正文
  • 我已经尝试了两种注释。两者都不起作用。我怎样才能使用两个方法参数...?
  • 这两种方式是什么?我只看到一个。还要检查内容类型是否为 application/json。你不能,它不应该那样工作
  • 用 requestparam 和 requestbody 注释方法参数...好的,所以我必须包装在包装器 bject 中并更改方法签名。
猜你喜欢
  • 2013-01-11
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 2017-06-22
  • 2013-10-25
相关资源
最近更新 更多