我熟悉如何从我的返回 json@Controller
方法使用@ResponseBody
注解。
现在我正在尝试将一些 json 参数读入我的控制器,但到目前为止还没有运气。
这是我的控制器的签名:
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") @RequestBody SearchRequest json) {
但是当我尝试调用这个方法时,spring 抱怨:Failed to convert value of type 'java.lang.String' to required type 'com.foo.SearchRequest'
删除@RequestBody
注释似乎没有什么区别。
手动解析 json 有效,因此 Jackson 必须位于类路径中:
// This works
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestParam("json") String json) {
SearchRequest request;
try {
request = objectMapper.readValue(json, SearchRequest.class);
} catch (IOException e) {
throw new IllegalArgumentException("Couldn't parse json into a search request", e);
}
有任何想法吗?我是否正在尝试做一些不受支持的事情?
您的参数应该是@RequestParam
, or a @RequestBody
, 不是都。
@RequestBody
用于 POST 和 PUT 请求,其中请求正文是您要解析的内容。@RequestParam
用于 URL 上或作为多部分表单提交的命名参数。
所以你需要决定你需要哪一个。您真的希望将 JSON 作为请求参数吗?这通常不是 AJAX 的工作方式,它通常作为请求正文发送。
尝试删除@RequestParam
看看是否有效。如果没有,并且您确实将 JSON 作为请求参数发布,那么 Spring 将不会帮助您在没有额外管道的情况下处理它(请参阅自定义WebDataBinder初始化 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-webdatabinder).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)