Java 在SpringMVC上将JSONObject作为参数传递

Java 在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

我希望使用SpringMVC实现一个REST服务,其中我在URL
“/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'
注:

  • url前缀
    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