java在SpringMVC上将JSONObject作为参数传递
我希望使用Spring MVC实现一个REST服务,其中我在URL"/url/lookup/{jsonparm}"
处传入以下对象:
{"url":"http://bubba.com/foo/bar", "max_hops":3}
我尝试了以下方法:
@RequestMapping(value = "/url/lookup/{jsonparam}", method = RequestMethod.GET)
@ResponseBody
public String urlLookup(@PathVariable("jsonparam") String jsonparam) {
// just to see if I can get the parms
logger.debug("urlLookup get request : " + jsonparam.toString());
JSONObject resp = new JSONObject();
return resp.toString(); // return an empty JSONObject for now
}
所以我通过调用
http://localhost:8080/v1/wsp/url/lookup/%7B%22max_hops%22%3A3%2C%22url%22%3A%22http%3A%2F%2Fbubba.com%2Ffoo%2Fbar%22%7D
运气不好,请在我的码头日志中查看以下内容:
WARNING: No mapping found for HTTP request with URI [/v1/wsp/url/lookup/{"max_hops":3,"url":"http://bubba.com/foo/bar"}] in DispatcherServlet with name 'rest'
注:
- url前缀
localhost:8080/v1/wsp/
正确,我的Servlet和请求映射也正确 - 我已经更新了这个问题,用一个
@PathVariable
作为回答者的建议之一
谢谢
# 1 楼答案
你混淆了
GET
和POST
方法要么:
POST
方法,并实际地将JSON内容发布到控制器。您可以使用任何REST客户端来调试它,例如Chrome的Advanced Rest Client李>使用
GET
方法(就像你现在这样)但是必须将JSON值作为名为jsonparam
的实际参数传递。因此,你的例子应该改为:后者不太常见
编辑:
再看看你的URL,我怀疑你混淆了两个Spring注释:
@PathVariable("jsonparam")
和:@RequestParam("jsonparam")
您正在使用
@RequestParam
,而您的URL表明需要@PathVariable
Edit2:
然而,正如这里可以看到的:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templatespath变量可以传递一个任何简单类型的值。我相信JSON不是其中之一,所以你有问题
我强烈建议使用
POST
来交换JSON值。然而,如果这不是一个选项,我建议使用GET
方法,@RequestParam
访问参数值,并像上面更正的示例那样传递JSON值# 2 楼答案
您应该使用@PathVariable而不是@RequestParam:
因为您有@RequestMapping(value=“/url/lookup/{jasonparam}”
您的@RequestMapping值中有一个输入错误。它应该是/url/lookup/{jsonparam}而不是{jasonparam}