[英]Parsing json into java objects in spring-mvc
我熟悉如何使用@ResponseBody
注释从@Controller
方法返回json。
现在我正在尝试将一些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必须在classpath中:
// 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
或 @RequestBody
,而不是两者。
@RequestBody
用于POST和PUT请求,其中请求的主体是您要解析的内容。 @RequestParam
用于命名参数,可以是URL,也可以是多部分表单提交。
所以你需要决定你需要哪一个。 你真的想把你的JSON作为请求参数吗? 这通常不是AJAX的工作原理,它通常作为请求体发送。
尝试删除@RequestParam
并查看是否有效。 如果没有,并且您确实将JSON作为请求参数发布,那么Spring将无法帮助您在没有其他管道的情况下处理它(请参阅自定义WebDataBinder初始化 )。
如果你在客户端使用jquery,这对我有用:
Java的:
@RequestMapping(value = "/ajax/search/sync")
public ModelAndView sync(@RequestBody SearchRequest json) {
Jquery(你需要包含Douglas Crockford的json2.js来获得JSON.stringify函数):
$.ajax({
type: "post",
url: "sync", //your valid url
contentType: "application/json", //this is required for spring 3 - ajax to work (at least for me)
data: JSON.stringify(jsonobject), //json object or array of json objects
success: function(result) {
//do nothing
},
error: function(){
alert('failure');
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.