Java 如何在JAX-RS@path中以路径参数的形式传递url
Java 如何在JAX-RS@path中以路径参数的形式传递url,java,spring,rest,jersey,jax-rs,Java,Spring,Rest,Jersey,Jax Rs,如何修改正则表达式以接受其中的url?或者任何其他替代解决方案来获取entityid,该ID是URL?您不应该将URL作为路径参数传递。实体id是一个常规标识符(整数、GUID,…),在这种情况下,它可以像您拥有的那样位于路径中,或者它是一个URL,在这种情况下,URL将是https://example.com/myapp/entityid/123,您又回到了实体id URL的实体id部分,它只是一个常规标识符 现在,从技术上讲,您可以通过使用对所有特殊字符进行编码来将URL作为路径参数传递,但
如何修改正则表达式以接受其中的url?或者任何其他替代解决方案来获取entityid,该ID是URL?您不应该将URL作为路径参数传递。实体id是一个常规标识符(整数、GUID,…),在这种情况下,它可以像您拥有的那样位于路径中,或者它是一个URL,在这种情况下,URL将是
https://example.com/myapp/entityid/123
,您又回到了实体id URL的实体id部分,它只是一个常规标识符
现在,从技术上讲,您可以通过使用对所有特殊字符进行编码来将URL作为路径参数传递,但我不推荐这样做
假设您的应用程序位于https://example.net/otherapp/
,则组合的url为:
https://example.net/otherapp/entityid/https%3A%2F%2Fexample.com%2Fmyapp%2Fentityid%2F123
正则表达式将与未编码的值匹配,因此这可能会起作用:
{entityid:https?://.}
注意:必须对所有值进行路径段编码,而不仅仅是URL值。整数是安全的,但几乎所有其他值都必须进行编码。这不是有效的URL。如果我们试图传递entityid=,这是有效的URL。
:
和/
在路径段中是无效字符。即使您允许:
,路径仍然会被解析为段:RESTfulExample
,entityid
,https:
,www.youtube.com
是的,您是正确的,这只是我试图解决的问题。如果我们通过,https:将被接受为一个值,因为在此“/”之后的任何内容都将被视为另一个值。创建该URL的人没有对路径段进行编码。有关正确编码的示例,请参见我的答案。
@GET
@Path("/entityid/{entityid : [a-zA-Z][a-zA-Z_0-9]}")
public Response getUserByentityid(@PathParam("entityid") String entityid) {
return Response.status(200)
.entity("getUserByentityid is called, username : " + entityid)
.build();
}