我是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预期的效果?
答案 0 :(得分:0)
如果您需要将特殊字符作为URL的一部分发送,则需要对其进行编码。
尝试使用http://example.com/%7BsampleCloudID%7D
这应该让您的控制器获得{}
This wikipedia文章应该为您提供详细信息。
答案 1 :(得分:0)
RFC 1738声明某些字符在网址中不安全:
不安全:
由于多种原因,角色可能不安全。 [...]其他 字符是不安全的,因为网关和其他传输代理是 已知有时会修改这些字符。这些字符是" {", "}"," |"," \"," ^","〜", " [","]"和"`"。
所有不安全的字符必须始终在URL中编码。对于 例如,角色"#"即使在系统中也必须在URL中编码 通常不处理片段或锚标识符,所以 如果将URL复制到另一个使用它们的系统中,它将会 没有必要更改URL编码。
答案 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
}