gpt4 book ai didi

java - 在 Spring MVC 上将 JSONObject 作为参数传递

转载 作者:行者123 更新时间:2023-11-29 05:49:57 24 4
gpt4 key购买 nike

我希望使用 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和Request Mapping也是正确的
  2. 我已将问题更新为使用 @PathVariable 作为响应者之一的建议

谢谢。

最佳答案

您混淆了 GETPOST 方法。

或者:

  1. 使用POST 方法并实际post JSON 内容到 Controller 。您可以使用任何 REST 客户端进行调试,例如。 Advanced Rest Client适用于 Chrome。
  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 值。

关于java - 在 Spring MVC 上将 JSONObject 作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14312900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com