【问题标题】:Spring mvc RESTFul API request patternSpring mvc RESTFul API 请求模式
【发布时间】:2012-03-20 22:13:35
【问题描述】:

我正在使用 Spring MVC 构建 RESTful API,例如:

@RequestMapping(value ="/session={sessionID}&p1={p1}&p2={p2}")
public @ResponseBody
Object getData1(@PathVariable String sessionID,
        @PathVariable String p1, @PathVariable String p2) {

    return "Get Data";
}

@RequestMapping(value ="/session={sessionID}&p1={p1}&p2={p2}&p3={p3}")
public @ResponseBody
Object getData2(@PathVariable String sessionID,
        @PathVariable String p1, @PathVariable String p2, @PathVariable String p3) {

    return "Get next Data";
}

但是,当我将 URL 键入为 /session=1&p1=a&p2=b 和 /session=1/&p1=a&p2=b&p3=c 时,它们总是返回相同的字符串“获取数据”。在调试时,我发现两个请求都使用了相同的第一种方法和 p2="b&p3=c"。 这真的让我很困惑:(

需要你的帮助。 谢谢。 -C

【问题讨论】:

  • 您的网址看起来像参数列表,但缺少“?”分隔符......似乎是一件奇怪的事情。为什么不使用像/session/{sessionId} 这样的常规REST URL,然后通过@RequestParam() 映射参数?例如。网址为/session/1?p1=a&p2=b。
  • 参见stackoverflow.com/q/5000876/249327,例如通过@PathVariable 获取参数
  • 你说的很对。我正在使用@RequestParam,它现在对我来说效果很好。谢谢。

标签: java api spring-mvc restful-url


【解决方案1】:

您可以通过使用不同的模式来解决不受支持的“重载”,例如

"/session={sessionID}/data1/&p1={p1}&p2={p2}"

和

"/session={sessionID}/data2&p1={p1}&p2={p2}}&p3={p3}"

【讨论】:

  • 您能否详细说明为什么我不能这样做?
  • 它采用第一个匹配的。没有什么说 'b&p3=c' 对 p2 来说不是一个完全合法的值,因此它不会继续尝试更多地查看是否存在“更好”的匹配。
  • 如果您提供自己的 org.springframework.util.PathMatcher 实现,它是可配置的
猜你喜欢
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2017-12-10
  • 2015-02-03
相关资源
最近更新 更多