REST API JAVA空路径参数

时间:2018-04-11 06:12:08

标签: java spring rest get jax-rs

我是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预期的效果?

3 个答案:

答案 0 :(得分:0)

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

This wikipedia文章应该为您提供详细信息。

答案 1 :(得分:0)

RFC 1738声明某些字符在网址中不安全:

  

不安全:

     

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

     

所有不安全的字符必须始终在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

答案 2 :(得分:0)

您可以通过这种方式编写代码,在这种情况下,您在更改路径变量类型时遇到任何错误

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

//do your stuff

}