Java 在SpringMVC上将JSONObject作为参数传递
我希望使用SpringMVC实现一个REST服务,其中我在URLJava 在SpringMVC上将JSONObject作为参数传递,java,spring-mvc,jetty,Java,Spring Mvc,Jetty,我希望使用SpringMVC实现一个REST服务,其中我在URL“/URL/lookup/{jsonparm}”处传入以下对象: 我尝试了以下方法: @RequestMapping(value = "/url/lookup/{jsonparam}", method = RequestMethod.GET) @ResponseBody public String urlLookup(@PathVariable("jsonparam") String jsonparam) { // just
“/URL/lookup/{jsonparm}”
处传入以下对象:
我尝试了以下方法:
@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'
注:
localhost:8080/v1/wsp/
正确,我的Servlet和请求映射也正确@PathVariable
谢谢。您混淆了
GET
和POST
方法
要么:
POST
方法将JSON内容实际发布到控制器。您可以使用任何REST客户端(例如Chrome)对此进行调试GET
方法(与当前一样)。但是您必须将JSON值作为名为jsonparam
的实际参数传递。因此,您的示例应改为:
http://localhost:8080/v1/wsp/url/lookup/jsonparam=%7B%22max_hops%22%3A3%2C%22url%22%3A%22http%3A%2F%2Fbubba.com%2Ffoo%2Fbar%22%7D
编辑: 再次查看您的URL,我怀疑您混淆了两个Spring注释:
@PathVariable(“jsonparam”)
和:@RequestParam(“jsonparam”)
@RequestParam
,而您的URL表明需要@PathVariable
Edit2:
但是,正如这里可以看到的:path变量可以传递任何简单类型的值。我相信JSON不是其中之一,因此你的问题
我强烈建议使用
POST
交换JSON值。但是,如果这不是一个选项,我建议坚持使用GET
方法,@RequestParam
访问参数值,并像上面更正的示例那样传递JSON值。您混淆了GET
和POST
方法
要么:
POST
方法将JSON内容实际发布到控制器。您可以使用任何REST客户端(例如Chrome)对此进行调试GET
方法(与当前一样)。但是您必须将JSON值作为名为jsonparam
的实际参数传递。因此,您的示例应改为:
http://localhost:8080/v1/wsp/url/lookup/jsonparam=%7B%22max_hops%22%3A3%2C%22url%22%3A%22http%3A%2F%2Fbubba.com%2Ffoo%2Fbar%22%7D
编辑: 再次查看您的URL,我怀疑您混淆了两个Spring注释:
@PathVariable(“jsonparam”)
和:@RequestParam(“jsonparam”)
@RequestParam
,而您的URL表明需要@PathVariable
Edit2:
但是,正如这里可以看到的:path变量可以传递任何简单类型的值。我相信JSON不是其中之一,因此你的问题
我强烈建议使用
POST
交换JSON值。但是,如果这不是一个选项,我建议使用GET
方法,@RequestParam
访问参数值,并像上面更正的示例那样传递JSON值。您应该使用@PathVariable而不是@RequestParam:
public String urlLookup(@PathVariable("jsonparam") String jsonparam){
}
因为您有@RequestMapping(value=“/url/lookup/{jasonparam}”
您的@RequestMapping值中有一个输入错误。它应该是/url/lookup/{jsonparam}而不是{jasonparam}您应该使用@PathVariable而不是@RequestParam:
public String urlLookup(@PathVariable("jsonparam") String jsonparam){
}
因为您有@RequestMapping(value=“/url/lookup/{jasonparam}”
您的@RequestMapping值中有一个输入错误。它应该是/url/lookup/{jsonparam}而不是{jasonparam}非常感谢我对代码做了一些更改:@RequestMapping(value=“/url/lookup/{jasonparam}”,method=RequestMethod.GET)这是否现在不起作用?我希望使用GET方法并将其作为我工作的最后一部分传递url@andre,谢谢你的注释…我担心你可能是对的。我将PathVariable作为一个字符串传递,带有正确的URL转义序列…所以我认为它应该可以工作吗?@user1172468对此表示怀疑,因为我看到有人在fir的path variable中传递JSON第一次。它被设计用来传递简单的字符串、数字和日期等。我仍然不明白为什么您不使用GET和实际的参数或POST-change方法签名来
urlLookup(@RequestBody String jsonparam)
,并在POST内容中用JSON调用它,而不转义。@user1172468我很高兴,编码愉快!:)非常感谢我稍微修改了代码:@RequestMapping(value=“/url/lookup/{jasonparam}”,method=RequestMethod.GET)这是否现在不起作用?我希望使用GET方法并将其作为我工作的最后一部分传递url@andre,谢谢你的注释…我担心你可能是对的。我将PathVariable作为一个字符串传递,带有正确的URL转义序列…所以我认为它应该可以工作吗?@user1172468对此表示怀疑,因为我看到有人在fir的path variable中传递JSON第一次。它被设计用来传递简单的字符串、数字和日期等。我仍然不明白为什么你不使用GET和实际的参数或POST-change方法签名来urlLookup(@RequestBody String jsonparam)
,并在POST内容中用JSON调用它而不转义。@user1172468我很高兴,编码愉快!:)谢谢。。。这就是我想要做的。我尝试了这个,但现在得到了:警告:在名为“rest”的DispatcherServlet中找不到URI为[/v1/wsp/url/lookup/{“max_hops”:3,“url”:“}]的HTTP请求的映射。。。。更新问题类型/url/lookup/{jasonparam}但是您有@PathVariable(“jsonparam”)字符串jsonparamYikes,感谢您指出这一点。。。修正了这个问题,但仍然不走运:-(谢谢…这就是我想要做的。我尝试了这个,但现在得到了:警告:没有找到HTTP请求的映射,URI[/v1/wsp/url/lookup/{“max_hops”:3,“url”:“}”),在DispatcherServlet中,名为“rest”…更新问题类型?/url/lookup/{jasonparam},但是您有@PathVariable(“jsonparam”)St