【问题标题】:REST API JAVA Empty Path ParametersREST API JAVA 空路径参数
【发布时间】:2018-04-11 06:12:08
【问题描述】:

我是 REST API 的新手。 我正在开发一个 REST API。 在以下 API 中,我采用的参数是 cloud-id。

这是 API 调用:

@GET
@Path("{cloud-id}")
@Produces("application/json")
public Object Getall(@PathParam("cloud-id") String cloudID) {
  if(cloudID!=null){
      //return some details
  }else{
     //return something else
  }
}

快乐之路:

http://example.com/sampleCloudID

这也很好用

http://example.com/(sampleCloudID)
It gives a 404 as expected

但是当我给出 URI 时

http://example.com/{sampleCloudID}

错误:

You specified too few path parameters in the request.

如果我收到的输入是 {samplecloudID},我希望服务返回 404,但如果路径变量在 {} 中,我将无法访问我的资源。

为什么花括号给我一个错误,但正常括号给我预期的 404?

【问题讨论】:

  • 您应该使用 url 作为顶部的http://example.com/sampleCloudID。括号仅在代码中使用,因此您可以将@PathParam 作为参数添加到您的方法中

标签: java spring rest get jax-rs


【解决方案1】:

如果您需要将特殊字符作为 URL 的一部分发送,则需要对其进行编码。 尝试使用http://example.com/%7BsampleCloudID%7D 这应该让您的控制器获得{}

This wikipedia 文章应该会给你详细信息。

【讨论】:

    【解决方案2】:

    RFC 1738 声明某些字符在 URL 中是不安全的:

    不安全:

    由于多种原因,字符可能不安全。 [...] 其他 字符是不安全的,因为网关和其他传输代理是 已知有时会修改此类字符。这些字符是“{”, “}”、“|”、“”、“^”、“~”、“[”、“]”和“`”。

    所有不安全的字符必须始终在 URL 中进行编码。为了 例如,字符“#”必须在 URL 中进行编码,即使在系统中也是如此 通常不处理片段或锚标识符,因此 如果 URL 被复制到另一个使用它们的系统中,它将 无需更改 URL 编码。

    来源:https://meta.stackexchange.com/questions/79057/curly-brackets-in-urls?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

    【讨论】:

      【解决方案3】:

      您可以这样编写代码,在更改路径变量类型时不会出现任何错误

      @GetMapping(value = { "/your-path/{cloud-id}", produces = "application/json")
      public Object Getall(@PathVariable(value = "cloud-id", required = false) String cloudID) {
      
      //do your stuff
      
      }
      

      【讨论】:

      • 路径变量 cloud-id 是强制性的,但如果我得到像 {cloud-id} 这样的东西,我想给一个 404。我得到你的解决方案,还有其他替代方案吗?
      猜你喜欢
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2017-01-21
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多