【问题标题】:Spring @RequestMapping handling of special charactersSpring @RequestMapping 处理特殊字符
【发布时间】:2015-09-12 11:33:57
【问题描述】:

我有一个这样的 REST API:

  @RequestMapping(value = "/services/produce/{_id}", method = RequestMethod.PATCH, 
  consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
  public String patchObject(@RequestBody PatchObjectRequest obj, 
      @PathVariable("_id") String id) {
  // some code
  }

我的问题是可能给出的 id 格式为:

US%2FCA%2FSF%2FPlastic

这是“US/CA/SF/Plastic”的 URL 编码。

我的问题是,当将 % 字符放入 URL 时,@RequestMapping 不会将其映射到此方法,它将返回 404。有没有办法接受其中包含 % 字符的 id 作为网址?

【问题讨论】:

  • 你能给我们看一个失败的例子吗?我希望看到对带有这些字符的特定 URL 的请求,并且 Spring 日志显示它没有找到映射器。

标签: java spring rest url urlencode


【解决方案1】:

您收到此错误是因为将其用作路径变量,它被解码,然后服务器尝试将其与不存在的路径匹配。几年前发布的类似问题:How to match a Spring @RequestMapping having a @pathVariable containing "/"?urlencoded Forward slash is breaking URL

一个不错的选择是将 _id@PathVariable 更改为 @RequestParam 并解决问题,然后将其从路径中删除。

【讨论】:

  • 如果您的意图是识别用于传入请求的 URI 中的模式,则此解决方案将不起作用。
【解决方案2】:

希望您可以在路径变量中添加正则表达式,例如:

@RequestMapping(value = "/services/produce/{_id:.+}", 
  method = RequestMethod.PATCH, 
  consumes = MediaType.APPLICATION_JSON_VALUE, 
  produces = MediaType.APPLICATION_JSON_VALUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多