1

我希望使用 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

运气不好,请在我的 Jetty 日志中看到以下内容:

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'

笔记:

  1. url 前缀localhost:8080/v1/wsp/是正确的,我的 Servlet 和请求映射也是正确的
  2. 我已更新问题以使用 a@PathVariable作为响应者建议的一个

谢谢。

4

2 回答 2

3

你很困惑GETPOST方法。

任何一个:

  1. 使用POST方法并将 JSON 内容实际发布到控制器。您可以使用任何 REST 客户端进行调试,例如。Chrome 的高级 Rest 客户端
  2. 使用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 注释:

  1. @PathVariable("jsonparam")和:
  2. @RequestParam("jsonparam")

您正在使用@RequestParam,而您的 URL 表明需要@PathVariable.

编辑2:

但是,可以在这里阅读:http: //static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates路径变量可以传递任何简单类型的值。我相信 JSON 不是其中之一,因此你的问题。

我强烈建议使用它POST来交换 JSON 值。但是,如果这不是一个选项,我建议坚持使用GET方法@RequestParam来访问参数值,并像上面更正的示例中那样传递 JSON 值。

于 2013-01-14T03:22:46.943 回答
1

您应该使用@PathVariable 而不是@RequestParam:

public String urlLookup(@PathVariable("jsonparam") String jsonparam){
}

因为你有 @RequestMapping(value = "/url/lookup/ {jasonparam} "

而且您的 @RequestMapping 值中有错字。它应该是 /url/lookup/ {jsonparam}而不是 {jasonparam}

于 2013-01-14T03:30:19.330 回答